如何使用 EA 遵照您的规则拷贝信号?·综合运用
(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 规则取消注释或改写,外汇与贵金属杠杆高,误跟信号可能造成快速回撤。
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 把同步设置逐项过一遍,比看十篇说明都实在。