3、过拟合的诊断方法:样本内与样本外表现差异、回测与实盘差距、夏普比率陷阱
过拟合这东西,说白了就是你的策略在历史数据上跑得漂亮,一到实战就露馅。我见过太多人拿着回测曲线兴奋得睡不着,结果实盘一个月就亏得怀疑人生。怎么提前发现?今天咱们就聊聊三个最实用的诊断方法。
3.1 样本内 vs 样本外:最直接的照妖镜
我个人习惯,拿到数据第一件事就是切分。把历史数据分成两段:一段用来训练和优化策略(样本内),另一段留着不动,专门用来验证(样本外)。
为什么要这么做?你想想看,如果你在样本内反复调参,策略自然会越来越贴合那段数据。但贴合不等于有效,可能只是记住了噪音。样本外数据是它没见过的,表现如何才是真本事。
核心判断标准:
- 样本内表现好,样本外也稳定 → 策略靠谱
- 样本内惊艳,样本外崩盘 → 典型过拟合
- 样本内样本外都差 → 策略本身不行
我在项目中遇到过一位同事,他的策略在样本内夏普比率做到3.5,兴奋得不行。我建议他拿后20%的数据跑一下,结果夏普直接掉到0.6。嗯,这就是典型的过拟合。后来我们重新简化了模型,样本外才勉强回到1.2。
实际操作中,我建议按时间顺序切分,比如前70%做样本内,后30%做样本外。千万别随机抽样,因为时间序列有前后依赖关系,随机抽样会泄露未来信息。
3.2 回测与实盘差距:理想很丰满,现实很骨感
回测跑得再好,也只是模拟。实盘才是真正的考场。我见过最惨的一次,回测年化收益40%,实盘第一个月就亏了15%。为什么会这样?
原因通常有这几个:
- 交易成本被低估:回测时滑点和手续费算得太乐观,实盘一跑,成本吃掉一大块利润
- 流动性问题:回测假设想买就能买,想卖就能卖。实盘小资金还好,大资金一进去,价格直接被打飞
- 幸存者偏差:回测用的数据里只有活到现在的股票,退市的那些早就被剔除了。这会导致回测收益虚高
- 未来函数:不小心用了未来数据,比如用当天的收盘价做开盘决策。这种错误我刚开始也犯过
避坑指南:我曾经犯过一个低级错误——回测时没考虑涨跌停限制。策略在回测里每天都能按理想价格成交,实盘遇到涨停板根本买不进去。后来我学乖了,回测时一定加上涨跌停、停牌这些真实约束。
怎么缩小回测和实盘的差距?我的经验是:回测时把交易成本翻倍算,滑点按最坏情况估计。如果这样还能赚钱,实盘才有戏。
3.3 夏普比率陷阱:别被数字骗了
夏普比率是衡量风险调整后收益的常用指标。但说实话,它被滥用了。很多人只看夏普高不高,却忽略了背后的猫腻。
夏普比率的计算公式是:
夏普比率 = (策略收益率 - 无风险利率) / 收益率标准差
看起来没问题对吧?但陷阱藏在细节里:
| 陷阱类型 | 说明 | 真实案例 |
|---|---|---|
| 频率陷阱 | 用日频数据算夏普,年化后数值会虚高 | 日频夏普0.5,年化后变成8.0,看起来很牛,其实只是统计把戏 |
| 非线性收益 | 夏普假设收益是正态分布,但策略收益往往有厚尾 | 平时小赚,偶尔大亏,夏普可能还不错,但实际风险极高 |
| 样本内过拟合 | 调参调出来的高夏普,样本外立马现原形 | 我见过有人把夏普调到6.0,样本外直接变负 |
我的建议:别只看夏普。我通常会同时看最大回撤、卡玛比率(收益/最大回撤)、胜率和盈亏比。如果一个策略夏普很高,但最大回撤超过20%,我会非常警惕。
举个例子,我去年测试过一个趋势跟踪策略。日频夏普算出来1.8,年化后接近30,看着很诱人。但仔细一看,最大回撤达到35%,而且收益集中在几次大行情里。说白了,平时在亏钱,偶尔吃一口大的。这种策略实盘很难拿住,因为回撤期太折磨人了。
知识体系总览
下面这张图总结了过拟合诊断的核心逻辑,我习惯把它贴在工位上,每次跑策略前都过一遍:
这三个诊断方法,说白了就是让你从不同角度审视策略。样本内样本外看的是历史拟合度,回测实盘差距看的是实战可行性,夏普比率陷阱看的是风险度量是否靠谱。三者结合,才能把过拟合的伪装一层层剥开。
嗯,最后提醒一句:没有完美的策略,只有不断验证和改进的过程。别指望找到一个万能公式,那本身就是最大的过拟合。