概述
PositionRelay TV Sync 将 TradingView 策略警报连接到 MetaTrader 5 跟随账户。您的 Pine 策略通过 StrategyWebhookJson 库格式化 webhook JSON;PositionRelay 将警报摄入虚拟源账户;TV Slave EA 在每个 MT5 slave 上镜像开仓、平仓与修改操作。
所有三个 EA(无冲突)
您可以在同一个 PositionRelay 账户上同时运行 MT5 Copy 和 TV Sync。请为每个 EA 使用独立的 MT5 终端——切勿将两个 slave EA 挂到同一账户。完整部署指南见 仪表盘设置向导。
- Master Publisher (
MasterPublisher.mq5) — 仅一个 MT5 主账户. POST /api/sync(发布主账户持仓). - Slave Subscriber (
SlaveSubscriber.mq5) — 每个 MT5 跟单从账户. GET /api/positions(镜像主账户). - TV Slave (
TVEchoSlave.mq5) — 每个 MT5 TV 镜像账户. GET /api/positions?source=tv(镜像 TradingView).
规则
- 在每个 EA 上使用相同的 PositionRelay User ID。
- 仅在一个终端上运行 MasterPublisher — 即您的 MT5 主账户。
- 仅在复制主账户的终端上使用 SlaveSubscriber(MT5 Copy 产品)。
- 仅在镜像 TradingView 信号的终端上使用 TVEchoSlave(TV Sync 产品)。
- 切勿将 SlaveSubscriber 和 TVEchoSlave 挂到同一 MT5 终端。
- 每个终端仅运行一个从 EA 实例(一个图表即可 — 不要把同一 EA 挂到多个图表)。
- 为每个从终端设置唯一的 InpAccountLabel(标签在 MT5 跟单从账户与 TV 从账户之间共享)。
- 在每个终端启用 Algo Trading(如使用 VPS / 虚拟主机也请启用)。
- 在 MT5 中允许对 https://ea-sync-production.up.railway.app 的 WebRequest(Tools → Options → Expert Advisors)。
- TradingView 警报 webhook URL:https://positionrelay.com/api/webhook(从仪表盘设置复制)。
示例:同时运行全部三个 EA: 终端 1 — master → MasterPublisher ((可选标签)); 终端 2 — prop copy → SlaveSubscriber (FTMO_01); 终端 3 — TV mirror → TVEchoSlave (TV_FTMO_01). TradingView 警报发送到 https://positionrelay.com/api/webhook — 不经过 MasterPublisher。
要求
- TradingView Plus 或更高套餐(Webhook URL 字段)
- TradingView 账户已启用 2FA
- 有效的 PositionRelay 订阅并含 TV Sync(Pro/Ultimate 或 Starter 附加组件)
启用TV Sync
- 在 PositionRelay 注册并订阅,然后打开 仪表盘设置向导。
- 选择 TradingView Sync 选项卡。
- 复制您的 Webhook URL、webhook 密钥以及 Pine import 代码片段。
Pine 库
- 打开已发布的 TradingView 上的 StrategyWebhookJson 库 (
lifestylemaniacsrt/StrategyWebhookJson)。 - 您的策略必须以
//@version=6作为第 1 行开头(库需要 Pine v6)。 - 在库页面仅对 import 行使用 Copy to clipboard 。
测试策略
将下方完整的 Webhook Alert Test 策略粘贴到新的 Pine strategy 中(不是 indicator)。用设置向导中的 webhook 密钥替换。不要只粘贴 import 行——这会导致「Pine version unspecified」错误。
Webhook Alert Test(复制整个脚本)
//@version=6
strategy("Webhook Alert Test", overlay=true)
import lifestylemaniacsrt/StrategyWebhookJson/1 as wh
var wh.Config cfg = wh.init("YOUR_WEBHOOK_SECRET", wh.Mode.CloudOnly)
float fastMa = ta.sma(close, 14)
float slowMa = ta.sma(close, 28)
if ta.crossover(fastMa, slowMa) and strategy.position_size == 0
strategy.entry("Long", strategy.long,
alert_message = wh.openMsg(cfg, "Long", "buy", 0.1, close * 0.99, close * 1.02))
if ta.crossunder(fastMa, slowMa) and strategy.position_size > 0
strategy.close("Long",
alert_message = wh.closeMsg(cfg, "Long"))使用 echo.Mode.CloudOnly 进行仅 webhook 测试。将 cfg 对象从 init() 传入 openMsg 和 closeMsg。
警报配置
- 将策略应用到图表。
- 创建警报 → Condition:您的策略 → Order fills only.
- Message 字段:
{{strategy.order.alert_message}} - 启用 Webhook URL 并粘贴仪表盘中的 webhook URL(
https://positionrelay.com/api/webhook). - Trigger: Once per bar close (推荐)。
MT5 电视从机 EA
- 安装 PositionRelay TV Slave Subscriber 来自 MQL5 Market。
- 在每个 MT5 跟随账户上将该 EA 挂到一张图表。
- 将
InpUserId设为您的 PositionRelay User ID,并为每个 slave 设置唯一的InpAccountLabel。 - 启用 Algo Trading,并为
https://ea-sync-production.up.railway.app允许 WebRequest(Tools → Options → Expert Advisors)。
该 EA 使用 https://ea-sync-production.up.railway.app上的内置端点: /api/positions?source=tv 和 /api/sync。TradingView 警报使用 https://positionrelay.com/api/webhook。
速率限制
TradingView 可能会限制警报(约每 3 分钟 15 条)。PositionRelay 通过 signalId对重试去重。
安全性
- 切勿在警报消息中放入经纪商凭据。
- 若 webhook 密钥泄露,请从仪表盘轮换密钥。
故障排除
- Pine version unspecified 或
import错误:将//@version=6作为第 1 行,并粘贴完整的 Webhook Alert Test 策略,而不是仅粘贴 import 行。 - 每个 slave EA 只运行一个源——不要在同一 slave 上同时镜像 MT5 master 和 TV 信号。
- 使用设置选项卡前,请确认您的套餐已启用 TV Sync。

