MagicTradeBot 트레이딩뷰 통합 가이드 (NATS 및 웹훅을 사용한 전체 설정)

1. 개요

MagicTradeBot은 TradingView 지표, 전략 및 Pine Script 알림으로부터 직접 거래 신호를 수신할 수 있습니다. 신호가 도착하면 내부 봇 신호와 동일한 실행 엔진을 거칩니다 — 주문 배치, DCA, 스마트 결정 및 브로드캐스트 알림이 모두 동일하게 작동합니다.

세 가지 구성 요소가 함께 작동합니다:

  • 🔗 tv-signal-bridge — TradingView 웹훅을 수신하고, 시크릿을 검증하고, 심볼을 정규화한 후 NATS에 게시하는 독립형 Axum 서비스
  • 📡 NATS JetStream — Docker에서 실행되는 경량 메시지 브로커로, 최소 한 번 이상 전달(at-least-once) 방식으로 브리지에서 봇으로 신호를 전송합니다
  • 🤖 MagicTradeBot 신호 리스너 — NATS를 구독하고, 중복을 제거하고, 게이트키퍼 검사를 실행한 다음 sync_bot_scan_result를 호출합니다
정보
외부 TV 신호는 일급 객체입니다. 신호 키가 signal_registry.yaml에 등록되면, 봇은 이를 TOP_GAINER_LONG_SIGNAL 또는 다른 내부 신호와 동일하게 처리합니다.

2. 신호 키 형식

모든 TradingView 신호는 다음 형식으로 키를 생성합니다:

TV_{전략}_{방향}_EXTERNAL_SIGNAL

설정 결과 신호 키
전략: EMA_CROSS, 방향: long TV_EMA_CROSS_LONG_EXTERNAL_SIGNAL
전략: RSI_DIV, 방향: short TV_RSI_DIV_SHORT_EXTERNAL_SIGNAL
전략: SUPERTREND, 방향: long TV_SUPERTREND_LONG_EXTERNAL_SIGNAL

3. 사전 요구 사항

  • MagicTradeBot이 설치 및 실행 중이어야 함
  • tv-signal-bridge 바이너리가 빌드되어 있어야 함
  • Docker Desktop이 설치 및 실행 중이어야 함 (NATS용)
  • TradingView 유료 요금제 — Essential 이상
  • TradingView가 브리지에 접근할 수 있는 공개 URL 또는 IP

4. 설정

4.1 Docker를 통해 NATS 시작

docker run -d \
  --name nats \
  --restart unless-stopped \
  -p 4222:4222 \
  -p 8222:8222 \
  nats:latest -js

4.2 tv-signal-bridge 구성

config/config.toml 편집:

[bridge]
bot_name    = "MagicTradeBot-1"
hmac_secret = "여기에-긴-시크릿-입력"

[stream]
backend  = "nats"
nats_url = "nats://127.0.0.1:4222"
subject  = "trade.signals"

[symbols.mappings]
"BTCUSDT" = "BTC/USDT"
"ETHUSDT" = "ETH/USDT"

4.3 tv-signal-bridge 시작

# Windows
./tv-signal-bridge-win.exe

# Linux / macOS
./tv-signal-bridge-linux

4.4 signal_registry.yaml에 신호 키 등록

register_trading_signals:
  - "TV_EMA_CROSS_LONG_EXTERNAL_SIGNAL"

register_broadcast_signals:
  - "TV_EMA_CROSS_LONG_EXTERNAL_SIGNAL"

4.5 MagicTradeBot에서 TV 신호 활성화

settings/tradingview.yaml 편집:

enabled: true
bot_name: "MagicTradeBot-1"
stream_backend: "nats"
nats_url: "nats://127.0.0.1:4222"
subject: "trade.signals"

5. TradingView 알림 설정

웹훅 URL:

https://your-server.com:8090/webhook/tradingview

메시지 (JSON):

{
  "secret":     "여기에-긴-시크릿-입력",
  "symbol":     "{{ticker}}",
  "side":       "long",
  "strategy":   "EMA_CROSS",
  "confidence": 80.0,
  "timestamp":  {{timenow}}
}

6. TradingView 없이 테스트

PowerShell 테스트 (Windows)

$timestamp = [int]([DateTimeOffset]::UtcNow.ToUnixTimeSeconds())

$body = @{
    secret     = "여기에-긴-시크릿-입력"
    symbol     = "BTCUSDT"
    side       = "long"
    strategy   = "EMA_CROSS"
    confidence = 85.0
    timestamp  = $timestamp
} | ConvertTo-Json

Invoke-RestMethod -Uri "http://localhost:8090/webhook/tradingview" `
  -Method POST -Body $body -ContentType "application/json"

7. 전체 체인 확인

브리지 로그 → 봇 로그 → Discord/Telegram 알림 → 데이터베이스 거래 기록 확인.

8. 구성 참조

9. 문제 해결

증상 해결 방법
브리지가 401 INVALID_SECRET 반환 시크릿 불일치 — 정확히 복사하세요
신호가 브리지에는 도착하지만 봇에는 도착하지 않음 enabled: true 확인 후 봇 재시작
'bot_name mismatch' bot_name이 두 구성 파일에서 동일해야 함

10. 빠른 참조 체크리스트

  • Docker Desktop 실행 중
  • NATS 컨테이너 -js 옵션으로 시작됨
  • 브리지가 포트 8090에서 실행 중
  • signal_registry.yaml에 신호 키 등록됨
  • tradingview.yaml 활성화 및 bot_name 일치
  • curl / PowerShell로 테스트 완료
  • 알림 및 거래 성공적으로 생성됨

📎 Related Topics