웹훅 연결하다 3번 막혔다 — 트레이딩뷰 알림을 자동 주문으로 바꾸는 법
알림이 울리면, 봇이 대신 주문합니다.
💡 30초 요약
- 트레이딩뷰 알림이 울리면 → 내 서버로 쪽지가 날아가고 → 봇이 바이비트에 대신 주문을 넣어요.
- 서버 주소에 :5000 같은 숫자를 붙이면 안 돼요. 트레이딩뷰는 80번·443번 문으로만 보냅니다.
- 쪽지에는 나만 아는 암호를 꼭 넣어요. 암호 없는 쪽지는 봇이 무시합니다.
- 트레이딩뷰 유료 요금제 + 2단계 인증이 켜져 있어야 이 기능이 보여요.
🔌 사람 대신 봇이 주문 넣는 구조
차트 보다가 "지금이다!" 싶어서 주문 버튼 누르려는데, 손이 떨려서 놓친 적 있으시죠? 밤새 차트 지키다 잠들어서 놓친 적도요.
오늘 하는 일은 딱 하나예요. 그 버튼을 봇이 대신 누르게 만드는 겁니다.
식당 호출벨을 떠올려 보세요. 손님이 벨을 누르면 주방에 주문이 들어가죠. 직원이 테이블을 계속 쳐다볼 필요가 없어요.
[트레이딩뷰] 조건이 맞으면 벨을 누름 (알림 + 쪽지)
│
▼
[내 서버의 봇] 쪽지를 읽고, 암호가 맞는지 확인
│
▼
[바이비트] 봇이 대신 주문을 넣음
여기서 벨 누르는 장치를 '웹훅'이라고 불러요. 이름만 어렵지, 알림이 울릴 때 정해진 주소로 쪽지를 보내주는 기능일 뿐이에요.
🧯 처음 이 글에서 틀렸던 것 (정정)
솔직하게 말씀드릴게요. 6월에 처음 올린 이 글에는 그대로 따라 하면 주문이 안 나가는 부분이 있었어요.
처음엔 서버 주소를 http://내서버IP:5000/webhook으로 안내했어요. 그런데 트레이딩뷰는 80번·443번 문으로만 쪽지를 보냅니다. 5000번 같은 다른 문 번호가 붙으면 아예 안 보내요.
그래서 제가 실제로 봇을 돌릴 때는 문 번호를 빼고 http://내서버IP/order 같은 주소를 썼어요. 쪽지에 암호(token)를 넣어서, 암호가 틀리면 봇이 주문을 거부하게 했고요. 그 과정은 업데이트편에 적어 뒀어요.
또 하나, 전략 코드 안의 쪽지와 알림 메시지 칸이 서로 엇갈리게 적혀 있었어요. 이번에 한 가지 방식으로 맞췄습니다.
① 봇에 암호 걸고 문 번호 바꾸기
3편에서 만든 webhook_bot.py를 조금 고쳐요. 바뀌는 건 두 가지예요. 암호 검사가 생기고, 문 번호가 5000 → 80으로 바뀝니다.
서버 까만 창에서 파일을 엽니다.
nano webhook_bot.py
안에 있던 내용을 전부 지우고 아래로 바꿔 붙여넣으세요.
from flask import Flask, request
from pybit.unified_trading import HTTP
app = Flask(__name__)
# 🔐 나만 아는 암호 (아무 글자나 길게. 트레이딩뷰 쪽지의 token과 똑같아야 해요)
SECRET = "여기에_나만아는_암호_길게"
# 🔑 1편에서 받은 키
session = HTTP(
testnet=True, # ⚠️ 처음엔 무조건 True (연습용 가짜 돈)
api_key="여기에_API_KEY",
api_secret="여기에_API_SECRET",
)
@app.route('/webhook', methods=['POST'])
def webhook():
data = request.get_json(force=True, silent=True) or {}
# 암호가 틀린 쪽지는 무시
if data.get('token') != SECRET:
return "no", 403
order = session.place_order(
category="linear", # USDT 무기한 선물
symbol=data['symbol'], # 예: BTCUSDT
side=data['side'], # Buy 또는 Sell
orderType="Market",
qty=data['qty'],
)
print("✅ 주문 전송 완료:", order)
return "ok", 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80) # 트레이딩뷰가 보내주는 80번 문
저장은 Ctrl + X → Y → Enter. 그리고 80번 문은 관리자 권한이 필요해서 이렇게 켭니다.
sudo python3 webhook_bot.py
Running on http://0.0.0.0:80 문구가 보이면 성공이에요. 서버에 방화벽을 켜 두셨다면 sudo ufw allow 80으로 80번 문도 열어 주세요.
② 트레이딩뷰 전략에 쪽지 심기
트레이딩뷰 아래쪽 파인 에디터를 열고, 전략에 "주문할 때 이 쪽지를 같이 보내라"고 적어 둡니다.
아래는 연습용 예시예요. 짧은 평균선이 긴 평균선을 뚫고 올라가면 사고, 다시 내려가면 파는 단순한 전략입니다. 수익 내라고 드리는 전략이 아니라, 연결이 되는지 보는 용도예요.
//@version=6
strategy("내 첫 자동매매 연습", overlay=true)
fast = ta.sma(close, 14) // 짧은 평균선
slow = ta.sma(close, 28) // 긴 평균선
// 봇에게 보낼 쪽지 (token은 ①에서 정한 암호와 똑같이)
buyMsg = '{"token":"여기에_나만아는_암호_길게","symbol":"BTCUSDT","side":"Buy","qty":"0.001"}'
sellMsg = '{"token":"여기에_나만아는_암호_길게","symbol":"BTCUSDT","side":"Sell","qty":"0.001"}'
if ta.crossover(fast, slow)
strategy.entry("오름", strategy.long, alert_message = buyMsg)
if ta.crossunder(fast, slow)
strategy.close("오름", alert_message = sellMsg)
쪽지에 들어가는 칸은 네 개뿐이에요.
| 칸 | 뜻 | 예시 |
|---|---|---|
| token | 나만 아는 암호 | ①에서 정한 글자 |
| symbol | 무슨 코인 | BTCUSDT |
| side | 사기 / 팔기 | Buy / Sell |
| qty | 얼마나 | 0.001 |
다 붙였으면 [저장] → [차트에 추가]를 누릅니다.
③ 알림 만들고 서버 주소 넣기
이제 벨을 답니다. 오른쪽 알림(🔔) → 알림 만들기로 들어가세요.
| 설정 칸 | 넣을 값 |
|---|---|
| 조건 | ②에서 추가한 내 전략 이름 |
| 메시지 | {{strategy.order.alert_message}} 한 줄만 |
| 알림 → 웹훅 URL ✅ | http://내서버IP/webhook (:5000 붙이지 않기!) |
{{strategy.order.alert_message}}는 "전략에 심어 둔 쪽지를 그대로 보내라"는 뜻이에요. 사는 신호면 buyMsg가, 파는 신호면 sellMsg가 알아서 골라져서 날아갑니다.
웹훅 칸이 아예 안 보이면 두 가지를 확인하세요. 트레이딩뷰가 무료 요금제이거나, 계정에 2단계 인증이 안 켜져 있는 경우예요. 2단계 인증은 프로필 → 설정 → 보안에서 켤 수 있어요.
④ 진짜 돈 쓰기 전에 시험 쏘기
알림을 기다리지 말고, 내 컴퓨터에서 먼저 쪽지를 한 번 쏴 봅니다.
맥은 '터미널', 윈도우는 '명령 프롬프트'를 열고 아래를 붙여넣으세요. 일부러 틀린 암호를 넣었어요.
curl -X POST http://내서버IP/webhook -H "Content-Type: application/json" -d "{\"token\":\"틀린암호\"}"
화면에 no가 뜨면 정상이에요. 서버까지 쪽지가 도착했고, 봇이 가짜 쪽지를 잘 걸러냈다는 뜻입니다. 주문은 안 나가요.
아무 반응이 없으면 서버가 꺼져 있거나, 80번 문이 막혀 있는 거예요. 이 상태로는 트레이딩뷰 쪽지도 못 받습니다.
🧯 자주 막히는 곳
| 증상 | 원인 / 해결 |
|---|---|
| 알림은 울리는데 주문이 안 나감 | 주소에 :5000 같은 문 번호가 붙어 있는지 확인. 80·443만 됩니다 |
서버 창에 403만 찍힘 | 전략 쪽지의 token과 봇의 SECRET 글자가 다름. 띄어쓰기까지 똑같이 |
| 웹훅 URL 칸이 안 보임 | 유료 요금제 + 2단계 인증 둘 다 필요 |
Permission denied (서버 켤 때) | 80번 문은 sudo를 붙여서 켜야 해요 |
| 메시지 칸 내용이 그대로 날아감 | 메시지 칸에 {{strategy.order.alert_message}} 한 줄만 있어야 해요 |
벨(알림)은 트레이딩뷰가 누르고, 주문은 봇이 대신 넣어.
쪽지에는 꼭 너만 아는 암호를 넣어. 암호 없는 쪽지는 봇이 버려.
진짜 돈 넣기 전에, 틀린 암호로 한 번 쏴 보고 "no"가 오는지부터 봐.
🙋 자주 묻는 질문
Q. 트레이딩뷰 무료로는 안 되나요?
웹훅은 유료 요금제에서만 쓸 수 있어요. 그리고 계정에 2단계 인증이 켜져 있어야 칸이 보여요.
Q. 주소를 https로 해야 하나요?
http(80번 문)도 됩니다. 다만 쪽지가 암호화 없이 오가니까 암호를 꼭 넣으세요. 더 안전하게 하려면 도메인을 연결해 https(443번 문)로 바꾸면 돼요.
Q. 봇이 3초 안에 답을 안 하면 어떻게 되나요?
트레이딩뷰는 3초 넘게 답이 없으면 쪽지 보내기를 취소해요. 그래서 봇 코드에는 주문 넣기 말고 무거운 일을 넣지 않는 게 좋아요.
Q. 암호 말고 더 막는 방법은 없나요?
트레이딩뷰가 쪽지를 보내는 주소(IP)는 4개로 정해져 있어요. 52.89.214.238, 34.212.75.30, 54.218.53.128, 52.32.178.7. 서버 방화벽에서 이 4곳만 80번 문에 들어오게 하면 한 겹 더 막을 수 있어요. 이 주소는 바뀔 수 있으니 트레이딩뷰 공식 안내를 한 번 확인하세요.
Q. 창을 닫으면 봇도 꺼지나요?
네, 지금 방식은 그래요. 창을 닫아도 계속 돌게 하는 방법은 5편에서 다뤄요.
✅ 이번 편 체크포인트
- ☑️ 봇에 SECRET 암호를 넣고 80번 문으로 켰나?
- ☑️ 전략 쪽지의 token이 봇 암호와 똑같나?
- ☑️ 메시지 칸에
{{strategy.order.alert_message}}한 줄만 넣었나? - ☑️ 웹훅 주소에 :5000이 없나?
- ☑️ 틀린 암호로 쏴서
no가 돌아왔나?
여기까지 됐으면 신호선 연결은 끝이에요. 이제 벨이 울리면 봇이 알아서 움직입니다.
📚 함께 보면 좋은 글
- ⬅️ 이전 글: VPS에 파이썬 매매 봇 올리고 실행하기 (Flask·pybit)
- ➡️ 다음 글: 매매 봇 테스트넷 검증과 손절 세팅 — 실계좌 켜기 전에
- ⭐ 인기 글: 승률 83.6%인데 수익은 +2.1%였다 — 승률의 함정
🗂️ 웹훅 자동매매 봇 시리즈 전체
| 편 | 글 |
|---|---|
| 원문 | 바이비트 웹훅 연결 왕초보 가이드 |
| 1편 | 바이비트 API 키 발급 방법 — 자동매매 준비물 3가지 |
| 2편 | 코인 봇용 VPS 빌리고 SSH 접속하기 |
| 3편 | VPS에 파이썬 매매 봇 올리고 실행하기 |
| 4편 👈 | 지금 보는 글 — 트레이딩뷰 알림을 자동 주문으로 바꾸는 법 |
| 5편 | 매매 봇 테스트넷 검증과 손절 세팅 |
| 업데이트 | 한국 IP로 바이비트 API 안 될 때 — VPS 릴레이 해결법 |
댓글
댓글 쓰기