如何使用 EA 遵照您的规则拷贝信号?·综合运用
🔁

如何使用 EA 遵照您的规则拷贝信号?·综合运用

(3/3)·从检测成交到订阅边界与信息留存,把信号服务的跟单规则真正握在自己手里

案例拆解 第 3/3 篇
很多跟单者以为订阅信号后系统会完美复制每一笔仓位,却忽略了净持仓与对冲账户下拷贝机的行为差异。当拷贝倍数调高,不匹配仓位可能被强制平掉,而非自动补齐。先弄清账户类型再动参数,比盲目拉高比率更重要。

◍ 在成交回 history 时把单子拆干净

MT5 的成交事件不会等你空闲才来。当 OnTradeTransaction 收到 TRADE_TRANSACTION_DEAL_ADD,代表一笔 deal 刚写进历史,此时才是抓成交明细的可靠窗口。 下面这段处理函数入口只接 request 和 result 的 const 引用,真正干活前先取 trans.type 判断事务类型。若不是 DEAL_ADD 直接略过,避免对挂单、改仓等事件误处理。 进入 DEAL_ADD 分支后,先声明一堆 long/double/string 局部变量承接字段:deal_entry、deal_volume、deal_symbol、deal_type、deal_magic、deal_positions_id、deal_comment,初始值清成 0 或空串。 随后用 HistoryDealSelect(trans.deal) 定位这笔成交。选中成功才调用 HistoryDealGetInteger / GetDouble / GetString 把上述字段逐个读出。若 Select 失败直接 return,不继续解析,防止读到脏数据。 被注释掉的两行是原作者预留的过滤逻辑:当 deal_magic==0 且信号名与 deal_comment 不一致时 return。你可以按自己跟单系统的 magic 规则取消注释或改写,外汇与贵金属杠杆高,误跟信号可能造成快速回撤。

MQL5 / C++
class="kw">const class="type">MqlTradeRequest &request,
                  class="kw">const class="type">MqlTradeResult &result)
  {
class=class="str">"cmt">//--- 获取事务类型的枚举值 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
class=class="str">"cmt">//--- 如果事务是添加事务到历史的结果
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      class="type">long    deal_entry          =class="num">0;
      class="type">class="kw">double  deal_volume         =class="num">0;
      class="type">class="kw">string  deal_symbol         ="";
      class="type">long    deal_type           =class="num">0;
      class="type">long    deal_magic          =class="num">0;
      class="type">long    deal_positions_id   =class="num">0;
      class="type">class="kw">string  deal_comment        ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_volume=HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_positions_id=HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);
         deal_comment=HistoryDealGetString(trans.deal,DEAL_COMMENT);
         class=class="str">"cmt">//if(deal_magic==class="num">0 && SignalInfoGetString(SIGNAL_INFO_NAME)!=HistoryDealGetString(trans.deal,DEAL_COMMENT))
         class=class="str">"cmt">//   class="kw">return;
        }
      else
       class="kw">return;
...

用小手数信号配拷贝机放大仓位

订阅了信号又租了内置虚拟主机,但信号提供者只做极小手数,直接跟单往往达不到自己的仓位需求。把本文研究的拷贝机也丢到同一台内置虚拟主机上跑,成交会按拷贝机里设的比例放大,跟单规模由你控。 部署时有个硬细节:copier.mq5 主文件和 languages.mqh 包含文件必须放在同一个文件夹,否则编译或运行会找不到依赖。MT5 里直接拖进同一子目录再编译最稳。 外汇和贵金属信号跟单放大仓位属于高风险操作,比例调太高可能在刷量行情里直接爆仓,建议先开模拟账户按 2~3 倍小比例验证再上实盘。

「别急着下结论」

信号复制里最容易被忽略的一点:比例调得越高,账户波动越容易失控。系统会定时比对你的持仓和信号源是否一致,发现只复制了部分仓位时会主动补单,但这过程不复核信号源的总浮动盈亏,意味着你接手的可能是已经浮亏的尾巴仓。 如果账户里混入了非信号仓,而“无需确认即可同步头寸”开着,这些单子会被自动平掉——这条在多人操作或手动干预过的账户上尤其要命。外汇与贵金属自带高杠杆风险,复制不等于免责。 虚拟主机指的是平台托管的运行环境,不是让你自己架 Windows VPS 跑复印机;官方提示会直接嵌参考链接,省得你猜。开 MT5 把同步设置逐项过一遍,比看十篇说明都实在。

把跟单诊断交给小布
这些账户类型与拷贝倍数的匹配判断,小布盯盘的 AIGC 已内置,打开对应品种页即可看到风险负载提示,你只需专注策略本身。

常见问题

净持仓下拷贝机增加已拷贝仓位成交量,对冲账户下则按放大后的交易量另开新仓,两者在同步失败时的处理表现也不同。
可以,小布盯盘的对应品种页会基于本金负载与历史波动率给出拷贝比率预警,避免手动算错导致爆仓概率上升。
它是事件驱动,只在真实成交发生时触发,避免了定时扫描带来的漏单与延迟,尤其适合高倍拷贝场景。
提供者最小手数偏大、本金负载已接近上限或拷贝比率算出来仍偏高时,放大只会让外汇贵金属的高风险更不可控。