一、排查总原则:先分层,再动手
拿到一个「EA 不对劲」的案例,最忌讳的就是上来就改代码。EA 的运行结果由四层共同决定,任何一层出问题都会表现为「策略失灵」,但修法完全不同:
- 环境层:终端版本、品种后缀、时区与服务器时间、自动交易开关、网络延迟——EA 加载失败与信号时间错位最常见的原因在这一层;
- 数据层:历史数据质量、点差滑点、指标缓冲区取值——回测与实盘不一致往往是数据层差异,而不是逻辑错误;
- 策略层:仓位算法、风控规则、信号条件——回撤大与信号乱主要在这一层定位;
- 代码层:状态机、订单管理、异常处理——重复开仓、漏平仓、卡死闪退通常是代码缺陷。
二、回撤大:从仓位算法到参数过拟合
回撤大不一定是「策略不行」,先看资金曲线的回撤形态再下结论:
- 仓位算法激进:固定手数改百分比、马丁加倍没设上限——单笔亏损被杠杆放大。排查方法:把仓位算法临时退回最小手数,观察回撤是否同步缩小;
- 风控缺失:没有整体止损、没有日亏损上限、加仓无封顶。健康的 EA 必须有「单笔止损 + 账户级熔断」双保险,这一块属于普遍缺失项,修复时优先补齐;
- 参数过拟合:回测曲线漂亮、实盘立刻回撤扩大——参数只是拟合了历史行情。判断特征:换个参数区间回测结果断崖式变化,或换个品种完全失效。
如果是仓位与风控问题,EA 优化修复通常是局部的:重写资金管理模块、补上风控规则,策略核心不动,成本可控。如果是过拟合,需要重新做参数稳健性验证,这已经接近 EA 定制开发 的范畴——先把验证流程建好,再谈上线。
三、信号乱:信号冲突、重复开仓与状态机缺失
「信号乱」的具体表现五花八门:该开不开、不该开乱开、同方向反复加仓、开了不平等。常见根因有三个:
- 信号条件冲突:多个指标信号互相矛盾,却没定义优先级和过滤规则。比如均线说多、MACD 说空,EA 实际执行了哪边?排查方法:把每个信号条件单独打印成日志,逐根 K 线核对;
- 状态机缺失:EA 不知道自己「有没有持仓、持仓是什么方向」,导致同一信号反复触发。修复方式是补一套显式的持仓状态管理,这也是多数免费 EA 的通病;
- 未来函数:信号在 K 线未走完时出现、走完后消失,实盘开仓与回测完全对不上。这属于逻辑硬伤,必须改为「收盘确认」再触发。
信号源本身有问题(指标画线漂移、缓冲区含义不明)的,先修指标再修 EA。如果你正打算定制新的信号指标,参考 MT5 指标定制全解析 里的「未来函数确认」与「缓冲区说明」两条,可以提前避开大部分坑。
四、加载失败:目录、兼容性与授权拦截
EA 根本跑不起来的排查顺序,从易到难:
- 目录与刷新:ex5 文件必须放在
MQL5\Experts\目录下,放入后在导航器里右键刷新; - 版本兼容:终端大版本更新后,旧编译产物的部分 API 可能被弃用,表现为加载即闪退或日志报错——重新用当前版本 MetaEditor 编译即可,改不动的老代码就走 EA 优化修复流程适配;
- 授权拦截:做了加密授权的 EA,在未授权账户、虚拟机或被篡改环境下会被主动拦截,日志通常给出明确的拒绝码。这不是故障,是保护机制在起作用,配置正确授权即可,机制详见 EA 加密授权系统详解;
- 文件损坏:传输中断导致的 ex5 损坏,表现为文件大小异常或加载无响应,重新分发原始文件解决。
另外提醒:如果 EA 的 ex5 是从别人手里买来的、无法联系原作者,任何修复都需要先评估代码可恢复性,这也是 EA 代码保护做得越好、二次维护越难的地方——保护与可维护性需要提前权衡。
五、修复还是重写:一个简单的判断标准
不是所有异常 EA 都值得修。判断标准一句话:看源码质量和结构清晰度。
- 优先修复:有完整源码、逻辑结构清楚、只是局部缺陷或缺少风控/授权模块——修复成本低,策略行为不发生突变;
- 建议重写:无源码只剩 ex5、代码补丁摞补丁、状态机混乱、或策略逻辑本身已过时——反复打补丁的隐性成本远高于重写,重写还能顺带补齐风控、加密授权与日志体系,一步到位。
重写不等于推倒重来:原策略的核心信号逻辑可以保留,相当于在旧地基上重建承重结构。完整流程参考 《MT5 EA 定制开发全流程指南》,从策略评估到实盘过渡都有对应步骤。无论修复还是重写,都可以在 EA 优化修复服务页提交免费评估,附上日志与参数,我们会先给排查结论再报价。