MT5 EA自动交易实战指南:从策略编写到实盘部署的完整流程
MT5 EA自动交易实战指南:从策略编写到实盘部署的完整流程
很多人以为EA跑不起来是代码写错了。其实在我见过的案例里,八成以上的「实盘异常」根本与策略逻辑无关,问题出在品种映射、成交模式和日志级别这些部署细节上。策略本身只是半成品,把它安全地送上实盘,是另一门手艺。

先别急着写OnTick,把品种和合约搞明白
同一段代码在MT4上跑得好好的,搬到MT5就下单失败,多半是品种命名和合约参数没对齐。各家经纪商的写法差异不小:IC Markets、Pepperstone常见后缀如EURUSD.a或EURUSD.r,Exness部分账户用EURUSDm,XM的账户类型不同后缀也会变。硬编码「EURUSD」是新手最容易踩的坑。
稳妥做法是用SymbolInfo系列函数做运行时校验,伪代码如下:
- 目标品种 = 输入参数 InpSymbol,为空则取 _Symbol
- 若 SymbolSelect(目标品种, true) 返回 false,打印可用品种列表并终止初始化
- 读取 SYMBOL_TRADE_TICK_VALUE、SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_STEP,写入全局结构体
- 在 OnInit 中校验止损距离是否满足 SYMBOL_TRADE_STOPS_LEVEL
注意:合约大小、最小手数、点值都以经纪商官网及终端「规格」页为准,不同账户类型可能不同,不要照抄别处的参数表。
成交模式决定了你的滑点长什么样
MT5的SYMBOL_FILLING_MODE是个容易被忽略的字段。市价单执行模式分立即成交、请求成交、市价执行几类,EA下单时必须把filling type传对,否则报「Unsupported filling mode」。用OrderSend之前先读一次品种支持的填充方式,取交集再传参,比事后排查省事得多。
常见错误:在测试器里跑通就以为万事大吉。策略测试器默认的成交模型与实盘撮合并不等价,尤其是挂单和部分成交场景。回测只能验证逻辑,不能替代实盘前的模拟盘验证。
回测怎么设,才不至于自欺欺人
参数设置建议明确写进文档,例如:数据区间取近三年M15,模型用「每一笔即时价」,点差按经纪商公布的典型值手动设定,初始资金与实盘账户保持同一量级。评价指标至少看四个:净利润、最大回撤、盈利因子、交易次数。交易次数太少的结果没有统计意义,这点比胜率更重要。
以下为示例参数,非真实回测结果:
- InpRiskPercent = 0.5(单笔风险占净值比例)
- InpATRPeriod = 14,止损 = 2.0 × ATR
- InpMaxSpread = 20(点,超过则跳过入场)
- InpMagic = 20250101(用于订单归属过滤)
注意:优化出来的「漂亮曲线」如果对参数极度敏感,实盘大概率失效。相邻参数区间的表现是否平滑,比单点最优更有参考价值。
上线前的部署清单
VPS选型看两点:与经纪商服务器的物理延迟,以及内存余量。跑多品种多周期的EA,2GB内存起步,日志写入频繁的要留磁盘空间。部署顺序我习惯这样走:编译无警告 → 模拟盘挂一周观察日志 → 检查OnTimer与OnTick是否冲突 → 再上小资金实盘。
运行期最常见的报错是「invalid stops」和「not enough money」,前者查止损距离与冻结级别,后者查手数计算是否用了过期的净值。日志级别别一上来就开到最细,先INFO,出问题再临时调DEBUG,否则日志文件几天就能撑爆VPS磁盘。
心态这件事,代码替不了
EA能执行纪律,但参数是你定的,回撤容忍度也是你定的。历史数据反复说明一件事:策略的失效往往不是突然死亡,而是慢慢钝化。定期复核实盘与回测的偏差,比不停换参数更接近长期复利的路子。确实如此。
你在部署EA时踩过哪个坑——是填充模式报错,还是品种后缀对不上?留言说说你的排查过程。
免责声明:本文仅代表作者观点,不构成任何投资建议。市场有风险,交易需谨慎。
