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

较热53.5
登录发帖
Exness 推荐平台

入金门槛低,出金到账快,支持多种账户类型

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
自动化架构师
自动化架构师 楼主 2026-9-12 10:32:19 浏览 515 回复 1 阅读 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
山间闲人
山间闲人 #2· 2026-9-12 11:03:10
2楼
你那个 iATR(NULL,0,14,1) 减自定义基准值的写法,回测里前几十单正常后面才零除,我怀疑是基准值随持仓动态更新后跟ATR贴太近。想问下247行那个分母,你有没有在减完后再加个极小值兜底?我这EA也踩过类似的坑😅
赞 回复 众裁0 复制
2026-9-12 11:03:10 #2
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 新手求助:IC Markets Raw账户佣金怎么算 下一帖 → 镑日GBP/JPY的波段机会:从M15看趋势