用于在以仓位为中心的 MetaTrader 5 环境中跟踪订单的虚拟订单管理程序·综合运用
🧩

用于在以仓位为中心的 MetaTrader 5 环境中跟踪订单的虚拟订单管理程序·综合运用

(3/3)·当多个任意 EA 共用一个交易品种仓位,直接移植的 MQL4 订单函数会让追踪彻底失序

偏理论 第 3/3 篇
不少人在 MT5 上把 MT4 的 OpenOrders 类逻辑直接套用,以为挂单和建仓都照旧。实际上同品种多 EA 共用仓位后,旧函数读到的只是合并后的净头寸,分散的建仓来源全被抹平,回测和实盘会对不上。

用测试EA验证虚拟仓与券商实盘的差异

这种体量的项目没法靠肉眼快速验完,我写了个 EA:VirtualOrderManaerTester.mq5,图上有按钮,能直接建、改、删、关虚拟单,不用真去券商下单。 图 6 里 M5 窗口挂了 EURUSD 买 0.1 手虚拟单,H4 窗口又挂了买 0.1 手虚拟单,注释行标得清楚;服务器状态栏却显示实盘买持仓 0.2 手。因为整体是净买入,灾难防护止损被摆在比 20 点硬止损更宽的位置。 图 7 换了相反方向的虚拟单对,两边各持一多一空,券商端持仓为零——这说明虚拟层跟券商账户是隔离的,外汇和贵金属杠杆高,拿这种隔离先跑逻辑再上实盘更稳。

「聚合多 VOM 的建仓订单视图」

单个 VOM EA 的视野被限制在自己的订单池里,跨实例的建仓分布看不见,复盘和干预都别扭。 为此单独写了一个轻量 EA:VOM_OrderDisplay.mq5,它把各 VOM 的建仓订单统一拉到一起显示,逻辑极简,不依赖复杂面板。 发行包里已带这个文件,直接丢进 MT5 的 Experts 目录编译挂上,就能在图表上看到所有 VOM 的开仓汇总。外汇与贵金属杠杆高,多 EA 同跑须防保证金连锁风险。 后续若有空会做增强版,用命令按钮按需改单、删单或平仓,但目前这版够用就好。

◍ VOM 框架的当前状态与遗留缺口

写这篇时 VOM 代码还停在 Beta,跟 MT5 本身一样没定型。它到底会成气候还是被遗忘,只能交给时间。回头对照第 3 节定的三个设计目标,落点已经比较清楚:社交性靠 VOM 交易函数把 EA 行为相互隔离,这一点做到了;稳定性在异常断线、订单部分成交上有一定表现,但真金白银跑起来估计还得补。 易用性交了份 .chm 帮助文档,策略测试器里也能跑——初步回测证明 VOM 能过测,但测试速度被拖慢了一截,产能优化还没做。 遗留清单里有几条硬骨头:VomGetLastError() 和 VomErrorDescription() 要补、配置要从文件读、各类止损得能跟踪。每发一版 MT5 Beta 都可能要改 VOM 保兼容,复杂软件里藏 bug 也正常。 开 MT5 把 VOM 包丢进策略测试器跑一遍,重点看回测耗时比原生 EA 慢多少,心里先有个数。

别急着下结论

VOM 发行包解压后,Experts\Virtual Order Manager 下要落 13 个 .mqh,外加 VOM_doc.chm;VOM EAs 子目录里另有 5 个 .mq5,其中 VOM_template_EA.mq5 是给你克隆自建策略的母版。chm 若双击空白,大概率是 NTFS 从网上下载带了锁定流,右键属性里点「解除锁定」即可,否则帮助页打不开。 有用户实测:第 2 版库在 MT5 净额结算账户编译后,virtualordermanager.mqh 第 855 行原填充模式会导致开单报错,改掉那一行才能正常发单。MT5 对冲账户本就能原生分仓,网格级别用独立 position 跟踪即可,VOM 更像是净额结算下的妥协方案,不是万能库。 外汇和贵金属杠杆高、滑点跳空频繁,净额结算下用虚拟订单管理复杂网格,回测和实盘偏差可能放大。先开 MT5 把 vom2_0.zip(616 KB)拖进数据文件夹验证一遍再谈改造。

MQL5 / C++
MtRequest.type_filling=ORDER_FILLING_FOK;
MtRequest.type_filling=SYMBOL_FILLING_FOK;
把多 EA 仓位对账交给小布
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到同品种下不同 EA 的建仓来源拆分,你只需判断策略是否冲突。

常见问题

测试时给每个 EA 分配独立幻数并启用 VOM 日志,观察 7 节中的回放输出,确认建仓订单映射回原 EA 而非合并显示。
可以,小布盯盘的品种页会解析 EA 写入的注释与幻数字段,将合并仓位按虚拟订单维度拆开呈现,省去手动翻日志。
10 节列出的 include 路径若不全,CTrade 包装与 VOM 头文件找不到引用,编译报未定义错误,需补齐发行包再构建。
它只做全部 VOM 建仓的平铺罗列,订单量上去后刷新开销与可读性都劣化,复杂场景应接独立面板而非终端默认池。