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 신호는 일급 객체입니다. 신호 키가
외부 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로 테스트 완료
- 알림 및 거래 성공적으로 생성됨