理解并有效地使用 MQL5 策略测试器·进阶篇
📘

理解并有效地使用 MQL5 策略测试器·进阶篇

第 2/2 篇

运行时错误藏在日志里而非编译期

MQL5 程序编译通过不代表执行就顺。运行时错误在执行或操作阶段才冒头,日志会打印出错原因和源码行号,典型如 4007 内存不足无法重分配数组、4101 图表 ID 错误、4301 未知品种查市场信息、4754 订单未找到、5120 内部数据库错误。 这些错都有固定数字代号。MQL5 把运行时错误定义成易识别的代码,调用 GetLastError() 就能在程序里抓到代号并写对应处理;回测时看「日志」标签,挂图运行时看「智能系统」标签的报错。 多数运行时错误不会中断程序,只有少数严重错会直接终止,比如数组超出范围。外汇和贵金属杠杆高,这类隐性错可能让策略在实盘静默失效,开 MT5 随便跑个有数组越界风险的 EA 就能在日志对照出代号。

◍ 交易服务器拒绝请求时的返回码

在 MT5 里用 OrderSend() 提交 MqlTradeRequest 后,若服务器侧拦截,错误不会静默消失,而是回写在交易返回结构里。回测时切到「日志」选项卡、实盘加载 EA 时看「智能系统」选项卡,都能抓到这类交易服务器错误。 常见几种返回码值得先记在参数表里:10006 表示请求被拒绝;10032 说明该操作仅限真实账户,模拟环境会直接挡掉;10033 是挂单数触到上限;10034 为当前品种订单与持仓总规模超限;10041 则是挂单激活被拒且订单取消。 这些数字不是随机文案,而是你写重试逻辑或风控拦截的依据。比如读到 10033/10034,就该在 EA 里先查已挂单数再发单,而不是盲目重发把请求打满。外汇与贵金属杠杆高,这类限制触发往往伴随滑点放大,验证前先用策略测试器跑一遍边界场景。

「用 MT5 调试器跑通历史与实时两种模式」

MQL5 自带的调试器能直接挂历史或实时行情跑你写的 EA / 指标,不用先部署到实盘就能看每一步变量怎么变。点工具箱里的调试器按钮后,会看到四个动作:基于历史数据开始/恢复、基于真实数据开始/恢复、暂停、停止。 选历史数据启动,程序会打开对应图表按 K 线一根根回放执行;选真实数据,则把程序加载到当前图表跟着报价走,图表名旁会标出「调试」字样。外汇与贵金属杠杆高、滑点跳空频繁,历史回放和真盘推送的时序差异可能让同一段代码表现不同,验证时两种模式都跑一遍才稳。 实操上,先在策略测试器选定品种和周期,再切到调试器点历史模式,断点打在 OnTick 或 OnCalculate 里,就能逐根看数组越界或订单判定错在哪。

摸清 MT5 策略测试器的测试类型与设置面板

MT5 的策略测试器比 MT4 那版能做的事多得多,最实用的是多币种回测。调出方式就两种:终端里按 Ctrl+R,或者点顶部菜单“查看”→“策略测试器”。 进到“概览”选项卡先选测试类型,选完会自动跳到“设置”选项卡。可选的类型包括信号(无可视化的 EA 信号)、指标、可视化(边跑边看图表反应)、压力和延迟、优化(完整/遗传/前向)、市场扫描器、数学计算,最底下还能“查看以前的结果”或用搜索框翻历史测试。 设置面板里要填的字段很直白:EA 文件、IDE 打开源码、品种、时间帧、品种规格、起止日期、前向拆分比例、延迟模拟、执行模型(跳价或其它)、点值利润计算、存款金额与币种、杠杆、是否优化、是否可视化。这些项直接决定回测贴近不贴近实盘。 跑完之后盯四个核心数:净利润=毛利减毛亏;回撤=账户经历的最大亏损幅度;盈利因子=毛利/毛亏;预期收益=单笔平均盈亏;恢复因子看亏后回血能力。外汇和贵金属杠杆高,回测盈利因子>1 只代表样本内概率占优,实盘仍可能因滑点和跳空逆转。 优化不是点一下就完事——得在概览里选优化模型,把参数组合全丢进去跑,才能筛出样本内表现最好的那组输入。

◍ 把这条线请下神坛

跑完策略测试器不等于策略能赚钱。MT5 测试里能暴露的三类错误——编译警告、运行时异常、交易服务器拒单——只是把程序跑通,离实盘风控还差一层。 有用户在 2023 年 9 月反馈:用 ChartIndicatorAdd 把 MACD 挂到子窗口,实盘正常,可视化测试却无声失败、日志无报错。这说明测试器的可视化模型本身有覆盖盲区,别把“测试通过”当成“逻辑无误”的凭证。 外汇和贵金属杠杆高、滑点跳空频繁,回测拟合优不代表 live 不爆。下次开 MT5 点开“代办错误”标签,先数清楚你 EA 在三种错误里栽过哪类,再谈优化参数。

常见问题

重点看运行时错误而非编译信息,通常带 'error' 或 'cannot' 的条目才是卡点,顺着调用栈往上翻到自己的函数。
交易服务器拒绝会返回具体数字码,比如旧价、点差超限或保证金不足,查对应码含义后再调发送逻辑。
可以,小布能替你跑通两种模式并标出信号偏移与成交差异,你只需打开品种页看比对结论。
贵金属跳空多,倾向用基于真实tick以减少拟合;控制点快但易高估胜率,仅作初筛。
不是,维度爆炸会拖慢且过拟合,建议先手筛关键3到5个参数再用遗传跑。