webhook으로 TradingView 알림 자동화하기: 실전 가이드
webhook이란 무엇인지, 지표 알림과 전략 알림의 차이, 플레이스홀더로 JSON 메시지를 만드는 방법, 그리고 알림 자동화를 안정적이고 안전하게 유지하기 위한 점검 사항을 알아봅니다.
TradingView는 차트 분석과 전략 개발에 가장 많이 쓰이는 도구 중 하나지만, 그 알림이 스스로 브로커에 주문을 보내지는 않습니다. 알림과 주문 실행을 잇는 다리가 webhook입니다. 알림이 발생하는 순간, 지정한 주소로 자동 전송되는 메시지죠. 이 글에서는 그 작동 방식, 메시지에 넣을 내용, 그리고 미리 알아 두면 좋은 안정성과 보안상의 함정을 설명합니다.
webhook이란 무엇인가
webhook은 어떤 일이 일어났을 때 한 시스템이 다른 시스템으로 HTTP 요청을 보내는 방식입니다. 상대 시스템이 계속 "새로운 거 있어?"라고 묻는 대신이죠. TradingView의 경우 알림 조건이 충족되면 TradingView 서버가 설정해 둔 webhook URL로 POST 요청을 보내고, 요청 본문에는 메시지 칸에 적은 텍스트가 담깁니다.
자동화 플랫폼 같은 수신 측은 메시지를 읽고 무엇을 할지(매수, 매도, 청산, 수량) 판단해 브로커 계좌로 주문을 보냅니다. 기억할 점: TradingView는 메시지를 보낼 뿐입니다. 실행, 리스크 관리, 이상 여부 점검에 관한 모든 판단은 수신 측에서 이루어집니다.
TradingView 헬프센터에 따르면 webhook 전송은 구독 플랜에 따라 달라지며, 보통 계정에 2단계 인증이 필요합니다. 요구 사항은 바뀔 수 있으니 공식 사이트에서 최신 내용을 확인하세요.
지표 알림 vs 전략 알림
자동화에 쓰이는 알림은 크게 두 종류입니다.
- 지표 또는 조건 알림: 지표, 가격, 또는 Pine 코드의 alert 함수에 생성합니다. 로직이 단순하거나 지표 자체가 신호를 보낼 시점을 결정할 때 적합합니다.
- 전략 알림: 전략(strategy) 유형 스크립트에 생성하며, 전략 엔진이 가상 주문(진입, 청산, 반전)을 실행할 때 발생합니다. 메시지에 방향과 수량 같은 주문 자체의 정보를 담을 수 있다는 장점이 있습니다.
이 차이는 동작을 바꾸기 때문에 중요합니다. 전략 알림은 전략 설정, 예를 들어 봉 마감 시에만 계산하는지 매 틱마다 계산하는지에 따라 달라집니다. 백테스트는 봉 마감 기준으로 돌렸는데 실시간 알림은 봉 중간에 발생한다면 결과가 다를 수 있습니다. 설정을 확인하고 일관되게 맞추세요.
메시지 만들기: JSON과 플레이스홀더
대부분의 자동화 시스템은 필드와 값으로 이루어진 JSON 형식의 메시지를 기대합니다. 말로 풀면, 일반적인 메시지에는 어떤 종목을 거래할지, 어느 방향인지, 몇 계약인지, 때로는 전략 ID나 연결을 식별하는 토큰 같은 필드가 들어갑니다. 정확한 형식은 수신 측이 정하므로, 항상 사용하는 플랫폼의 문서에서 템플릿을 복사하세요.
TradingView는 플레이스홀더를 지원합니다. 이중 중괄호 안에 넣는 변수로, 전송 시점에 실제 값으로 바뀝니다. 종목, 종가, 시간에 대한 플레이스홀더가 있고, 전략 알림에는 주문 방향과 수량에 대한 것도 있습니다. 플레이스홀더를 제대로 쓰면 같은 메시지 템플릿을 다시 쓰지 않고 여러 차트에서 재사용할 수 있습니다.
지켜 두면 좋은 몇 가지 규칙:
- JSON을 올바르게 유지하세요. 필드 이름과 텍스트는 큰따옴표로 감싸고, 필드 사이에는 쉼표를 넣고, 마지막에는 쉼표를 남기지 마세요.
- 모든 상황에서 채워지지 않을 수 있는 필드에 의존하지 마세요.
- TradingView 알림 로그에서 치환된 메시지를 확인해 실제로 무엇이 전송되었는지 보세요.
올바른 종목과 계약 롤오버
선물에는 고유한 문제가 있습니다. 연속 차트(예: NQ1!)는 근월물을 보여 주고 자동으로 전환되지만, 브로커는 어떤 특정 계약을 거래할지 알아야 합니다. 메시지가 연속 차트 이름을 보낸다면 수신 측이 이를 올바른 계약으로 변환해야 합니다. 특정 계약을 보낸다면 롤오버 시점에 알림을 업데이트해야 합니다. 자세한 설명은 선물 계약 롤오버 글에 있습니다.
안정성 관련 고려 사항
좋은 자동화란 작동하지 않았을 때 그 사실을 알 수 있는 자동화입니다. 알아 둘 점:
- 알림 만료: 일부 플랜에서는 알림에 만료일이 있습니다. 만료된 알림은 아무 경고 없이 조용히 전송을 멈춥니다. 미리 알림을 설정해 두세요.
- 스크립트 변경: 지표나 전략을 수정해도 기존 알림은 이전 버전으로 계속 돌아갈 수 있습니다. 보통은 알림을 다시 만들어야 합니다.
- 중복 알림: 같은 차트에 알림이 두 개 있거나 봉 하나에 여러 번 발생하는 알림은 중복 주문을 보낼 수 있습니다. 발생 빈도를 의도적으로 설정하고, 가능하면 수신 측이 중복을 감지하게 하세요.
- 지연: webhook은 인터넷을 거쳐 전달되므로 늦어질 수 있습니다. 빠른 장에서는 작은 지연도 가격에 영향을 줍니다. 슬리피지와 체결 비용 글을 참고하세요.
- 수신 측 장애: 수신 서버를 사용할 수 없으면 메시지가 유실될 수 있습니다. 좋은 시스템이라면 이를 알려 줍니다.
webhook URL 보안
webhook URL은 사실상 열쇠입니다. 이 URL과 메시지 형식을 아는 사람은 누구나 당신의 계좌로 주문을 보낼 수 있습니다. 따라서:
- 스크린샷, 포럼, 단체 채팅방에 URL을 공개하지 마세요.
- 가능하면 수신 측이 검증하는 비밀 토큰을 메시지 안에 넣으세요.
- URL이 유출되었다고 의심되면 새 연결을 만들고 기존 연결을 폐기하세요.
- 수신 측에 리스크 한도를 설정해, 잘못된 메시지라도 거대한 포지션을 열 수 없게 하세요.
가동 전 체크리스트
- 전략을 알림이 실행되는 것과 같은 계산 설정으로 테스트했나요?
- 메시지가 수신 측 문서 기준으로 올바른 JSON인가요?
- 종목이 올바른 계약에 매핑되어 있나요?
- 알림의 만료일을 알고 있나요?
- 일일 손실 한도와 최대 계약 수를 설정했나요?
- 모든 것을 먼저 시뮬레이션에서 테스트했나요?
핵심 정리
- webhook은 전달자일 뿐입니다. TradingView가 메시지를 보내고, 수신 측이 실행하고 리스크를 관리합니다.
- 전략 알림은 방향과 수량을 전달할 수 있지만, 일관된 계산 설정이 필요합니다.
- 올바른 JSON과 정확한 플레이스홀더는 많은 실수를 막아 줍니다.
- 만료, 중복, 스크립트 수정은 흔한 장애 원인입니다.
- webhook URL은 비밀입니다. 비밀번호처럼 다루세요.
실제로 어떻게 하는지 보고 싶다면 TradingView 알림을 WeCore에 연결하기 가이드가 있습니다. WeCore는 알림을 받아 본인의 브로커 또는 프랍펌 계좌에서 주문으로 바꾸고 자동 리스크 한도를 적용하며, 시뮬레이션 모드로 시작할 수 있습니다.