你们有没有遇到过这种情况:同一个EA,同一段历史行情,就在自己电脑上回测,换个数据源跑出来的结果简直像两个策略?我前阵子就因为这个事,差点把一个本来还能用的EA给否了。
事情是这样的,我手上有个做欧美日内的小EA,逻辑不复杂,就是亚盘窄幅震荡后博欧盘开盘的突破。之前一直用MT4自带的历史数据,默认就是M1的。跑2023年一整年,盈利曲线挺好看,最大回撤也就8%左右,胜率大概六成出头。我当时挺得意,觉得这玩意挂个VPS就能跑了。后来在一个汇友群里看人聊,说MT4自带的M1数据回测精度不够,尤其是做突破和挂单的EA,一定要用Tick数据才准。我心里咯噔一下,就去弄了个Tick数据来试。
不试不知道,一试真的吓一跳。同一个EA,同样的参数,用Tick数据回测出来的结果,盈利直接砍了将近四成,最大回撤从8%飙到15%而且有几笔在M1数据里显示盈利的单子,在Tick数据里居然是止损离场的。我当时第一反应是数据有问题,反复导入了三次,又核对了点差设置,才发现问题出在M1数据的“偷价”上。
说白了,M1数据每根K线只记录开高低收四个价,EA挂的限价单或者止损单,在回测时只能按这根K线里“可能出现过”的价格去撮合。比如一根M1的阳线,开盘价1.0850,最高1.0870,你的buy limit挂在1.0855,M1回测会直接给你成交在1.0855,因为它默认价格从开盘到最高是线性走过的。但真实的Tick数据里,价格可能是先往下砸到1.0845再拉上去的,你的单子要么没触发,要么触发后先被扫了止损。这就是差距的来源。
我后来做了个对比,把两种数据源的优缺点列了一下,给大伙儿参考:
踩过的坑也得说一下。首先,不要直接用MT4自带的那套M1数据去跑突破类EA,尤其是做黄金或者镑美这种波动大的品种,M1的偷价会让你误以为策略很能打。然后,Tick数据导入之前,一定要确认时间区间和你的回测区间对得上,我有一次导入的Tick数据少了两个月,回测直接从2023年3月开始,结果自己没注意,白高兴一场。还有,回测的时候点差和滑点一定要手动设,不要用“当前点差”,历史点差和现在差很多,欧美以前经常是1.5到2个点,现在很多账户都不到1个点,你按现在的点差去跑两年前的行情,结果肯定失真。
现在我的做法是,先用M1数据快速筛策略逻辑,觉得有戏的,再换Tick数据跑一遍,最后对比两者的差异。如果差异超过20%,我就会特别警惕,要么是策略对执行价格太敏感,要么是参数过度拟合了。说白了,回测只是排雷,不是让你相信那个盈利数字。真正挂上VPS跑实盘,又是另一回事了。
你们平时回测是用M1多还是Tick多?有没有遇到过回测很美、实盘拉胯的情况,都是怎么排查的?
对了补充一句,我后来把两个数据源的建模质量都调到最高再跑了一遍,发现差距主要出在点差和滑点的模拟上,M1那个默认点差太理想化了。
事情是这样的,我手上有个做欧美日内的小EA,逻辑不复杂,就是亚盘窄幅震荡后博欧盘开盘的突破。之前一直用MT4自带的历史数据,默认就是M1的。跑2023年一整年,盈利曲线挺好看,最大回撤也就8%左右,胜率大概六成出头。我当时挺得意,觉得这玩意挂个VPS就能跑了。后来在一个汇友群里看人聊,说MT4自带的M1数据回测精度不够,尤其是做突破和挂单的EA,一定要用Tick数据才准。我心里咯噔一下,就去弄了个Tick数据来试。
不试不知道,一试真的吓一跳。同一个EA,同样的参数,用Tick数据回测出来的结果,盈利直接砍了将近四成,最大回撤从8%飙到15%而且有几笔在M1数据里显示盈利的单子,在Tick数据里居然是止损离场的。我当时第一反应是数据有问题,反复导入了三次,又核对了点差设置,才发现问题出在M1数据的“偷价”上。
说白了,M1数据每根K线只记录开高低收四个价,EA挂的限价单或者止损单,在回测时只能按这根K线里“可能出现过”的价格去撮合。比如一根M1的阳线,开盘价1.0850,最高1.0870,你的buy limit挂在1.0855,M1回测会直接给你成交在1.0855,因为它默认价格从开盘到最高是线性走过的。但真实的Tick数据里,价格可能是先往下砸到1.0845再拉上去的,你的单子要么没触发,要么触发后先被扫了止损。这就是差距的来源。
我后来做了个对比,把两种数据源的优缺点列了一下,给大伙儿参考:
- M1数据:优点是文件小、回测快,跑一年也就几分钟,适合做策略逻辑的初步验证。缺点是精度差,尤其是对挂单、止损止盈距离很近的EA,回测结果会严重偏乐观。我那个欧美突破EA就是典型,止损只设了15个点,M1根本模拟不出真实的触发顺序。
- Tick数据:优点是精度高,能还原每一笔报价,挂单触发、滑点、点差变化都更接近实盘。缺点是数据文件巨大,回测慢,我跑一年欧美Tick数据花了将近四十分钟,而且对电脑内存要求也高。另外Tick数据也不是万能的,不同经纪商的Tick粒度不一样,有的只是把M1拆成几十个点,并不是真正的每笔报价。
踩过的坑也得说一下。首先,不要直接用MT4自带的那套M1数据去跑突破类EA,尤其是做黄金或者镑美这种波动大的品种,M1的偷价会让你误以为策略很能打。然后,Tick数据导入之前,一定要确认时间区间和你的回测区间对得上,我有一次导入的Tick数据少了两个月,回测直接从2023年3月开始,结果自己没注意,白高兴一场。还有,回测的时候点差和滑点一定要手动设,不要用“当前点差”,历史点差和现在差很多,欧美以前经常是1.5到2个点,现在很多账户都不到1个点,你按现在的点差去跑两年前的行情,结果肯定失真。
现在我的做法是,先用M1数据快速筛策略逻辑,觉得有戏的,再换Tick数据跑一遍,最后对比两者的差异。如果差异超过20%,我就会特别警惕,要么是策略对执行价格太敏感,要么是参数过度拟合了。说白了,回测只是排雷,不是让你相信那个盈利数字。真正挂上VPS跑实盘,又是另一回事了。
你们平时回测是用M1多还是Tick多?有没有遇到过回测很美、实盘拉胯的情况,都是怎么排查的?
对了补充一句,我后来把两个数据源的建模质量都调到最高再跑了一遍,发现差距主要出在点差和滑点的模拟上,M1那个默认点差太理想化了。
