1. 概述
MagicTradeBot 可以直接从 TradingView 指标、策略和 Pine Script 警报接收交易信号。 信号到达后,会经过与内部机器人信号相同的执行引擎——订单下达、DCA、 智能决策和广播通知的工作方式完全相同。
三个组件协同工作:
- 🔗 tv-signal-bridge — 独立的 Axum 服务,接收 TradingView webhook,验证密钥,标准化交易对,并发布到 NATS
- 📡 NATS JetStream — 运行在 Docker 中的轻量级消息代理,以"至少一次"的传递方式将信号从桥接器传送到机器人
- 🤖 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 或更高版本
- 一个公共 URL 或 IP,以便 TradingView 可以访问桥接器
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 警报设置
Webhook 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 测试
- 通知和交易已成功创建