昨晚优化完最后一批参数组合,回测曲线漂亮得让我以为找到了圣杯,欧美15分钟图半年翻了两倍多。结果切到实盘模拟跑了三天,连吃七单止损,单子全是进去就反向,跟回测里那种顺滑的走势完全是两个世界。这事儿折腾了我将近两个月,今天把参数过拟合这个坑掰开揉碎聊聊。
先说结论吧,回测盈利越夸张,实盘翻车概率往往越高。我翻过自己近三年做过的二十多套EA,真正能在实盘活过三个月的,没有一套回测年化超过60%。那些回测曲线跟垂直起飞似的,基本都是把噪音当成了规律。
问题出在哪儿?多数人优化EA的方式是拿历史数据反复跑,直到找到一个参数组合让曲线最好看。这本质上是在做曲线拟合,而不是策略发现。我早期干过最蠢的事,把移动止损的ATR倍数从1.5调到2.3,回测胜率从41%跳到58%,兴冲冲上了实盘,结果那两周行情恰好是窄幅震荡,2.3倍ATR的止损宽到几乎不触发,等趋势来了直接一波带走。
我自己总结了一套过滤过拟合的土办法,不保证绝对有效,但至少能筛掉八成的假信号。
还有个容易忽略的坑,点差和滑点的回测设置。很多人回测时用固定点差,比如欧美设15美金点差,但实盘在数据行情或隔夜时段点差能飙到30我吃过一次大亏,EA策略是突破进场,回测时每单盈利12-15点,看着挺稳,实盘遇到一次非农,点差瞬间拉宽,进场就浮亏十几个点,连续几次直接把账户打回原点。现在我的回测模板里点差一律用动态模型,至少是固定点差的1.8倍,滑点按每单2-3点计算,这样跑出来的结果才勉强接近实盘感受。
另外说下资金管理层面的过拟合。很多人喜欢优化固定手数或百分比风险,但回测里最优的风险比例往往在实盘里撑不过连续回撤。我自己的做法是把回测最大回撤乘以1.5作为实盘心理预期,再反推仓位。比如回测最大回撤10%,那实盘就要做好15%的准备,这时候你要是还用回测里那个每单5%风险参数,基本就是奔着爆仓去的。
最后补充个反直觉的经验,减少参数比增加参数更抗造。我早期写EA总想加各种过滤器,时间过滤、波动率过滤、K线形态确认,结果参数越多,拟合越深,实盘越废。后来狠心砍到只剩入场信号和移动止损两个核心参数,其他全靠外部条件硬编码,反而连续三个月稳定跑赢欧元兑美元的单边和震荡行情。
目前这套验证流程大概帮我过滤掉了七成的过拟合策略,但说实话,每次上新EA前我还是会心虚,毕竟市场结构一直在变,去年有效的参数今年可能就失效了。你们平时怎么处理回测和实盘的偏差?有没有遇到过回测特别差但实盘反而意外的策略?聊聊各自的案例。
先说结论吧,回测盈利越夸张,实盘翻车概率往往越高。我翻过自己近三年做过的二十多套EA,真正能在实盘活过三个月的,没有一套回测年化超过60%。那些回测曲线跟垂直起飞似的,基本都是把噪音当成了规律。
问题出在哪儿?多数人优化EA的方式是拿历史数据反复跑,直到找到一个参数组合让曲线最好看。这本质上是在做曲线拟合,而不是策略发现。我早期干过最蠢的事,把移动止损的ATR倍数从1.5调到2.3,回测胜率从41%跳到58%,兴冲冲上了实盘,结果那两周行情恰好是窄幅震荡,2.3倍ATR的止损宽到几乎不触发,等趋势来了直接一波带走。
我自己总结了一套过滤过拟合的土办法,不保证绝对有效,但至少能筛掉八成的假信号。
- 首先,参数敏感性测试。别只看最优解,把你觉得合理的参数范围全部跑一遍。比如均线周期,从10到30每隔1跑一次,如果盈利分布是平滑渐变的,比如周期20盈利1000,21盈利980,22盈利950,那这参数大概率靠谱。如果出现20周期盈利2000,21周期直接变亏损,这种断崖式变化说明你捕捉的是特定历史形态,实盘必死。
- 然后,样本外验证。把数据切成三段,前60%用来调参,中间20%用来做验证集,最后20%坚决不动,等全部定稿后才跑一次。我见过太多人用同一段数据反复试,试到满意为止,这跟考试前先看答案再做题没区别。
- 还有,多品种普适性。同一套逻辑,如果只在欧美上有效,换到镑美或黄金就稀烂,那大概率是拟合了欧美的特定波动节奏。我现在的标准是至少要在三个非相关品种上都能稳定盈利,才考虑上实盘。
还有个容易忽略的坑,点差和滑点的回测设置。很多人回测时用固定点差,比如欧美设15美金点差,但实盘在数据行情或隔夜时段点差能飙到30我吃过一次大亏,EA策略是突破进场,回测时每单盈利12-15点,看着挺稳,实盘遇到一次非农,点差瞬间拉宽,进场就浮亏十几个点,连续几次直接把账户打回原点。现在我的回测模板里点差一律用动态模型,至少是固定点差的1.8倍,滑点按每单2-3点计算,这样跑出来的结果才勉强接近实盘感受。
另外说下资金管理层面的过拟合。很多人喜欢优化固定手数或百分比风险,但回测里最优的风险比例往往在实盘里撑不过连续回撤。我自己的做法是把回测最大回撤乘以1.5作为实盘心理预期,再反推仓位。比如回测最大回撤10%,那实盘就要做好15%的准备,这时候你要是还用回测里那个每单5%风险参数,基本就是奔着爆仓去的。
最后补充个反直觉的经验,减少参数比增加参数更抗造。我早期写EA总想加各种过滤器,时间过滤、波动率过滤、K线形态确认,结果参数越多,拟合越深,实盘越废。后来狠心砍到只剩入场信号和移动止损两个核心参数,其他全靠外部条件硬编码,反而连续三个月稳定跑赢欧元兑美元的单边和震荡行情。
目前这套验证流程大概帮我过滤掉了七成的过拟合策略,但说实话,每次上新EA前我还是会心虚,毕竟市场结构一直在变,去年有效的参数今年可能就失效了。你们平时怎么处理回测和实盘的偏差?有没有遇到过回测特别差但实盘反而意外的策略?聊聊各自的案例。
