最近监管那边又出了新规,搞得我手里的几个EA参数得重新调。说起来都是泪,之前我那个黄金EA,回测数据看着漂亮得不行,年化300%多,最大回撤才8%,结果一上实盘,两周亏了快15%。后来我才琢磨明白,问题全出在回测数据优化上。今天就把我踩过的坑和解决办法捋一捋,希望能帮到有同样困扰的汇友。
先说说最坑的一个问题:很多人(包括我当初)直接用MT4自带的默认数据跑回测,尤其是那种“每个tick基于实时价格”的模式,看着挺高级,其实数据源有严重偏差。我那个黄金EA就是栽在这上面,默认数据里点差是固定的,可实际交易时段点差波动特别大,尤其是非农、CPI这种数据公布的时候,点差能瞬间拉大到平时的3-5倍。回测里没算这笔账,实盘自然就崩了。解决方案是,必须用自定义数据源,而且要选“每个tick基于真实报价”的模式,最好能导入你券商那边的历史点差数据,没有的话至少也得用第三方工具把点差波动补进去。我后来换了tick数据套件重新跑,回测结果直接砍掉一半利润,但实盘表现反而稳了。
第二个坑是过度优化,也就是所谓的“曲线拟合”。我一开始为了追求漂亮的回测曲线,拼命调参数,什么均线周期、止损距离、加仓倍数,恨不得把每个参数都调到最优。结果就是,参数对历史数据敏感得不行,稍微换个时间段就废了。后来我学乖了,用了样本外测试和滚动优化的办法:把五年数据分成三段,前三年做参数优化,中间一年做验证,最后一年做样本外测试。如果样本外表现和优化结果差太多,说明参数过拟合了,直接砍掉重来。另外,参数个数最好控制在3个以内,多了基本就是灾难。
第三个坑跟成交模型有关。我早期跑回测喜欢用“即时成交”,觉得这样速度快,结果忽略了滑点和延迟。实盘里挂单经常跳空,尤其是镑美和黄金这种流动性波动大的品种。后来我改成“当前价格成交”并手动加上5-10点的滑点,再配合持仓时间的限制,回测结果才跟实盘对得上。还有一点,别用“控制点”模式,那个是给EA调试用的,跑数据会失真。
最后说下数据质量本身。我吃过亏的是不要忽略隔夜利息和佣金,很多默认回测里这些是零,但实盘每天都要扣。我那个黄金EA,持仓过夜三天,光利息就把利润吃掉一小半。现在每次回测前,我都会在设置里把点差、佣金、隔夜利息、滑点全填上,宁多勿少。跑完再看结果,心里才有底。
整体看下来,回测数据优化这事儿,核心就是“让回测环境无限接近实盘”,别被漂亮曲线迷惑。我现在每套EA跑完,都会拿至少三个月的历史数据做滚动验证,再模拟盘跑两周才敢上实盘。不知道你们有没有遇到过回测跟实盘差距特别大的情况?都是怎么排查的?交流。
先说说最坑的一个问题:很多人(包括我当初)直接用MT4自带的默认数据跑回测,尤其是那种“每个tick基于实时价格”的模式,看着挺高级,其实数据源有严重偏差。我那个黄金EA就是栽在这上面,默认数据里点差是固定的,可实际交易时段点差波动特别大,尤其是非农、CPI这种数据公布的时候,点差能瞬间拉大到平时的3-5倍。回测里没算这笔账,实盘自然就崩了。解决方案是,必须用自定义数据源,而且要选“每个tick基于真实报价”的模式,最好能导入你券商那边的历史点差数据,没有的话至少也得用第三方工具把点差波动补进去。我后来换了tick数据套件重新跑,回测结果直接砍掉一半利润,但实盘表现反而稳了。
第二个坑是过度优化,也就是所谓的“曲线拟合”。我一开始为了追求漂亮的回测曲线,拼命调参数,什么均线周期、止损距离、加仓倍数,恨不得把每个参数都调到最优。结果就是,参数对历史数据敏感得不行,稍微换个时间段就废了。后来我学乖了,用了样本外测试和滚动优化的办法:把五年数据分成三段,前三年做参数优化,中间一年做验证,最后一年做样本外测试。如果样本外表现和优化结果差太多,说明参数过拟合了,直接砍掉重来。另外,参数个数最好控制在3个以内,多了基本就是灾难。
第三个坑跟成交模型有关。我早期跑回测喜欢用“即时成交”,觉得这样速度快,结果忽略了滑点和延迟。实盘里挂单经常跳空,尤其是镑美和黄金这种流动性波动大的品种。后来我改成“当前价格成交”并手动加上5-10点的滑点,再配合持仓时间的限制,回测结果才跟实盘对得上。还有一点,别用“控制点”模式,那个是给EA调试用的,跑数据会失真。
最后说下数据质量本身。我吃过亏的是不要忽略隔夜利息和佣金,很多默认回测里这些是零,但实盘每天都要扣。我那个黄金EA,持仓过夜三天,光利息就把利润吃掉一小半。现在每次回测前,我都会在设置里把点差、佣金、隔夜利息、滑点全填上,宁多勿少。跑完再看结果,心里才有底。
整体看下来,回测数据优化这事儿,核心就是“让回测环境无限接近实盘”,别被漂亮曲线迷惑。我现在每套EA跑完,都会拿至少三个月的历史数据做滚动验证,再模拟盘跑两周才敢上实盘。不知道你们有没有遇到过回测跟实盘差距特别大的情况?都是怎么排查的?交流。
