之前在论坛看到有汇友分享过回测和实盘对不上的情况,当时还没太在意,最近自己真碰上了才觉得头疼 😅
我写了个跑欧美M15的EA,逻辑不复杂,就是均线加ATR过滤。在MT5策略测试器里用近两年数据跑,盈利曲线挺平滑的,最大回撤也就12%左右。但上了模拟盘跑了三周,同样的参数,信号触发次数比回测少了快一半,有几笔明明该进的单子压根没触发。我翻日志看到这么一句:“not enough money”,可我模拟账户余额明明够开0.1手的啊。后来又怀疑是点差问题,把回测里的点差从默认改成实盘常见的1.6,结果好一些但还是对不上。也试过把模型从“每笔订单”换成“基于真实报价”,差异小了点,可成交价还是偏。
现在有点想不通的是,回测里那个ATR过滤的阈值,实盘是不是因为报价跳动导致计算出来的值跟历史数据不一致?还是说模拟盘的撮合机制本身就跟回测引擎不一样?我甚至开始怀疑是不是自己代码里用了未来函数,但检查了几遍没看出来。
有没有汇友遇到过类似情况,一般从哪几个方向去排查比较靠谱?先谢过了 🙏
我写了个跑欧美M15的EA,逻辑不复杂,就是均线加ATR过滤。在MT5策略测试器里用近两年数据跑,盈利曲线挺平滑的,最大回撤也就12%左右。但上了模拟盘跑了三周,同样的参数,信号触发次数比回测少了快一半,有几笔明明该进的单子压根没触发。我翻日志看到这么一句:“not enough money”,可我模拟账户余额明明够开0.1手的啊。后来又怀疑是点差问题,把回测里的点差从默认改成实盘常见的1.6,结果好一些但还是对不上。也试过把模型从“每笔订单”换成“基于真实报价”,差异小了点,可成交价还是偏。
现在有点想不通的是,回测里那个ATR过滤的阈值,实盘是不是因为报价跳动导致计算出来的值跟历史数据不一致?还是说模拟盘的撮合机制本身就跟回测引擎不一样?我甚至开始怀疑是不是自己代码里用了未来函数,但检查了几遍没看出来。
有没有汇友遇到过类似情况,一般从哪几个方向去排查比较靠谱?先谢过了 🙏
