2. 过拟合的常见表现:回测完美、实盘崩溃的典型症状
说实话,我见过太多这样的场景了——策略回测曲线漂亮得像教科书里的范例,年化收益30%+,最大回撤不到5%,夏普比率3.0以上。然后一上实盘,一个月亏掉20%。
这不是段子,是我亲身经历过的惨痛教训。今天咱们就来聊聊,过拟合到底长什么样。
2.1 回测曲线:过于完美的信号
先看一个典型的过拟合回测曲线特征:
典型症状清单
- 净值曲线几乎45度角向上——现实中哪有这么完美的策略?
- 最大回撤极小(比如小于3%)——市场波动不可能这么温柔
- 每年收益高度稳定——熊市牛市都赚钱,这概率比中彩票还低
- 交易次数异常多——参数调得越细,交易越频繁,过拟合风险越大
我个人习惯,看到这种曲线第一反应就是:这策略八成有问题。为什么?因为真实市场的收益分布是尖峰厚尾的,不可能这么平滑。
2.2 实盘崩溃的典型模式
过拟合策略上实盘后,通常有几种死法:
| 死法类型 | 表现 | 原因 |
|---|---|---|
| 慢性死亡型 | 连续小亏,慢慢吞噬本金 | 参数过度适配历史噪声,市场风格一变就失效 |
| 急性猝死型 | 遇到极端行情,单日巨亏 | 模型没经历过这种场景,完全没准备 |
| 震荡折磨型 | 频繁开平仓,手续费吃掉利润 | 参数太敏感,一点波动就触发交易 |
| 假突破陷阱型 | 每次突破都追,每次都被套 | 回测中突破策略表现好,实盘全是假突破 |
我在项目中遇到过最典型的一个案例:一个同事花了三个月优化均线策略,回测里年化50%。结果实盘第一周,连续遇到两次假突破,直接亏了8%。他当时脸都绿了。
2.3 过拟合的“照妖镜”:样本外测试
怎么判断是不是过拟合?最简单的方法就是做样本外测试。
我的经验法则
回测收益和样本外收益的差距超过50%,基本可以判定为过拟合。比如回测年化30%,样本外只有10%,那这策略大概率是废的。
具体做法:
- 把数据分成两段:前70%做训练,后30%做验证
- 只在训练数据上调参数
- 调好后,用验证数据跑一遍,看结果
- 如果验证结果远差于训练结果——嗯,你懂的
# 一个简单的样本外测试框架
import pandas as pd
import numpy as np
def sample_out_test(strategy, data, train_ratio=0.7):
split_idx = int(len(data) * train_ratio)
train_data = data[:split_idx]
test_data = data[split_idx:]
# 训练阶段
train_result = strategy.backtest(train_data)
print(f"训练集收益: {train_result['return']:.2%}")
# 测试阶段
test_result = strategy.backtest(test_data)
print(f"测试集收益: {test_result['return']:.2%}")
# 过拟合检测
gap = abs(train_result['return'] - test_result['return'])
if gap > 0.5 * abs(train_result['return']):
print("⚠️ 警告:可能存在过拟合!")
return gap
2.4 另一个信号:参数敏感性
过拟合策略还有一个特征——参数稍微变一点,结果就天差地别。
举个例子:
- 参数=20时,年化收益30%
- 参数=21时,年化收益直接掉到5%
- 参数=19时,变成亏损10%
这种策略你敢用吗?反正我不敢。真正稳健的策略,参数在一定范围内波动,结果应该相对稳定。
避坑指南
我曾经犯过一个低级错误:为了追求回测收益,把参数优化到小数点后两位。结果实盘一跑,市场稍微波动一下,策略就完全失效了。后来我学乖了,参数只保留整数,甚至只保留5的倍数。
2.5 过拟合的根源:你在拟合噪声,不是信号
说白了,过拟合的本质是:你把市场随机波动当成了规律。
市场数据里有两部分:
- 信号:真正的规律,比如趋势、均值回归
- 噪声:随机波动,没有预测价值
过拟合就是模型太聪明了,连噪声都记住了。但噪声是随机的,换个时间段就不一样了。所以实盘一跑,模型就懵了。
你想想看,如果一个人能记住过去10年每一天的天气,但让他预测明天——他大概率会错。因为他记住的是历史细节,不是天气规律。
2.6 一张图看懂过拟合
下面这张图展示了过拟合的核心逻辑:
2.7 总结一下
过拟合的典型症状,说白了就三句话:
- 回测太完美——完美到不真实
- 参数太敏感——动一点就崩
- 样本外太差——换个时间段就不行
如果你发现自己的策略有这些特征,别急着上实盘。先停下来,好好想想:我到底是在找规律,还是在背答案?
一个小技巧
我每次做完回测,都会故意把参数随机调大调小10%,看看结果波动大不大。如果波动超过20%,我就知道这策略还需要打磨。
记住一句话:回测是历史,实盘是未来。历史可以完美,未来永远不确定。
公众号:蓝海资料掘金营,微信deep3321