MT5回测跑EURUSD时EA报错零除,日志该怎么定位?

较热51.6
登录发帖
XM 推荐平台

覆盖品种全,新手友好,支持多种入金方式

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
自动化架构师
自动化架构师 楼主 2026-9-12 10:32:19 浏览 516 回复 0 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 4 帖数 16 积分 1944 汇币 1582
1楼
真的被这个零除报错搞得头大,MT5回测跑EURUSD从上周卡到现在,一直没定位到根源。策略逻辑不复杂,就是一小时周期上做均线交叉加ATR过滤,实盘模拟跑着都正常,唯独一进策略测试器就翻车。
现象是回测能正常开始,跑个几十单之后突然中断,日志里刷出 zero divide in 'MyEA.mq5' (line 247),后面跟着一串测试中止提示。我把第247行单独抠出来看,就是个手算手数的小函数,分母是 iATR(NULL,0,14,1) 减掉一个自定义的波动基准值。问题是我明明在调用前加了 if(atrValue<=0) return;,可测试器还是报,这就很邪门。
已经试过的:把ATR周期从14换成20,没用;改成用Close[]数组自己算真实波幅,报错行号变了但还是零除;甚至把整个手数计算先硬编码成0.01,回测能跑完,但那就等于策略废了。怀疑跟测试器里tick数据生成方式有关,某些K线ATR算出来是0,或者自定义基准值在初始化阶段没赋值,导致分母提前被用。挂到VPS上跑实时倒是没复现,但回测结果根本没法信任。
想请教下各位做MT5开发的老手,这种回测里零除到底该怎么定位?是靠 Print() 把分母逐tick打出来,还是用 OnInit() 里加断言?测试器的日志级别需不需要调到详细模式才能看到变量值?有踩过类似坑的兄弟给指条路吧,被这个EURUSD的回测卡得睡不好觉了。

后来发现是回测到某几根K线时ATR值直接返回0,自定义基准值刚好也是0,减出来分母就是零,实盘没遇到大概是点差和报价流不一样。
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 新手求助:IC Markets Raw账户佣金怎么算 下一帖 → 镑日GBP/JPY的波段机会:从M15看趋势