Simplified): MagicTradeBot TradingView 集成指南(使用 NATS 和 Webhook 的完整设置)

1. 概述

MagicTradeBot 可以直接从 TradingView 指标、策略和 Pine Script 警报接收交易信号。 信号到达后,会经过与内部机器人信号相同的执行引擎——订单下达、DCA、 智能决策和广播通知的工作方式完全相同。

三个组件协同工作:

  • 🔗 tv-signal-bridge — 独立的 Axum 服务,接收 TradingView webhook,验证密钥,标准化交易对,并发布到 NATS
  • 📡 NATS JetStream — 运行在 Docker 中的轻量级消息代理,以"至少一次"的传递方式将信号从桥接器传送到机器人
  • 🤖 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 或更高版本
  • 一个公共 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 测试
  • 通知和交易已成功创建

📎 Related Topics