1. 过拟合的本质:为什么回测漂亮实盘却亏钱?

说实话,这个问题我几乎每周都会被问到。

有个朋友拿着他的策略给我看,回测曲线漂亮得像教科书一样——年化收益40%,最大回撤不到5%,夏普比率3.8。他问我:「这策略能上实盘了吧?」

我扫了一眼,问他:「你回测用了多少参数?」

他说:「也就优化了十几个参数吧。」

嗯,问题就出在这里。

1.1 过拟合到底是什么?

过拟合,说白了就是你的策略在历史数据上「背答案」背得太好了。

它记住的不是市场的规律,而是历史数据里的噪声和偶然事件。就像学生考试,不是理解了知识点,而是把往年真题的答案全背下来了。换一套题,立马露馅。

核心定义:过拟合是指模型在训练数据(回测数据)上表现极好,但在未见数据(实盘数据)上表现很差的现象。

我做过一个实验,印象很深。用随机生成的噪声数据去跑策略优化,只要参数够多、优化次数够多,你总能找到一条漂亮的回测曲线。但那是假的,纯粹是运气。

1.2 为什么回测漂亮,实盘却亏钱?

这里有个关键点,很多人没想明白。

回测和实盘之间的差距,本质上是「历史规律」和「未来规律」的差距。但更可怕的是,你回测里看到的「规律」,可能根本就不是规律。

举个例子。我见过一个策略,它在每年3月份都赚钱,连续5年如此。回测里这看起来是个很强的季节性因子。但实际原因是什么?是那几年3月份恰好都有一次小反弹,纯属巧合。你把这个「规律」写进策略,实盘能不亏吗?

注意:回测表现越好,参数越复杂,过拟合的风险反而越大。这不是悖论,是统计学的必然。

1.3 过拟合的三种典型表现

根据我的经验,过拟合通常有这三种样子:

  1. 参数过多——策略里有十几个甚至几十个可调参数,每个参数都经过精细优化。你想想看,这么多参数组合在一起,总能找到一组让回测好看的数值。
  2. 策略过于复杂——条件判断层层嵌套,信号逻辑绕来绕去。复杂到你自己都解释不清为什么这个条件要设成3而不是5。
  3. 回测曲线过于完美——年化收益高得离谱,回撤小得不像话,而且每年每月都赚钱。真实市场哪有这么好的事?

我的经验:如果一个策略的回测曲线看起来「太完美」,我第一反应不是兴奋,而是警惕。我曾经被这种「完美曲线」坑过一次,从那以后,我养成了先看最差年份表现的习惯。

1.4 过拟合的数学本质

咱们稍微深入一点。过拟合的数学本质,是模型把数据中的「信号」和「噪声」一起学进去了。

信号是市场真正的规律,比如趋势、均值回归、波动率聚集等。噪声是随机波动,比如某天因为一条推特暴涨、某个季度财报超预期等。

一个健康的策略,应该只学习信号,忽略噪声。但过拟合的策略,把噪声也当成了规律。

# 一个简单的过拟合示例
# 假设我们只有10个数据点,却用了5阶多项式去拟合
import numpy as np

# 真实规律:y = 2x + 1
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y_true = 2 * x + 1

# 加入一些噪声
np.random.seed(42)
y_noise = y_true + np.random.normal(0, 2, 10)

# 用5阶多项式拟合(过拟合)
coeffs = np.polyfit(x, y_noise, 5)
# 这个模型在训练点上拟合得很好
# 但预测新数据时,会严重偏离真实规律

这段代码虽然简单,但道理是一样的。你用高阶多项式去拟合带噪声的数据,训练集上的误差可以做到几乎为零,但泛化能力极差。

1.5 过拟合的代价

过拟合的代价不只是亏钱那么简单。

代价类型 具体表现
资金损失 实盘亏损,回撤超出预期
时间成本 花了几个月开发的策略,一周就失效
信心打击 连续亏损后,开始怀疑自己的方法论
机会成本 把资金和精力浪费在错误的方向上

我个人觉得,最严重的其实是信心打击。我见过不少交易员,被过拟合策略坑过之后,变得畏手畏脚,连正常的交易机会都不敢抓了。

1.6 过拟合的诊断框架

怎么判断一个策略是不是过拟合了?我总结了一个简单的框架:

过拟合诊断框架 策略回测结果 诊断1:参数数量是否过多? 诊断2:策略逻辑是否过于复杂? 诊断3:回测曲线是否过于完美? ⚠ 过拟合风险高,需谨慎

这三个问题,只要有一个答案是「是」,你就得小心了。如果三个都是「是」,那基本可以断定——这个策略有问题。

记住:回测是用来发现策略的弱点,而不是用来证明策略有多强。如果你回测的目的只是为了找一条好看的曲线,那你大概率已经过拟合了。

1.7 一个真实的教训

最后分享一个我自己的经历。

几年前,我开发了一个基于多个技术指标共振的策略。回测结果好得惊人——年化收益60%,最大回撤只有8%。我当时兴奋得不行,觉得找到了圣杯。

结果实盘第一周就亏了5%。我还不信邪,觉得是运气不好。第二周又亏了3%。第三周...嗯,我果断停了。

后来复盘才发现,那个策略的十几个参数,每一个都是针对历史数据「精心调教」过的。换到实盘数据上,那些参数组合就不再有效了。

从那以后,我给自己定了个规矩:任何策略,如果参数超过3个,就必须用样本外数据做验证。这个习惯,帮我避了不少坑。

避坑指南:我曾经犯过一个低级错误——用全部历史数据做参数优化,然后用同一批数据做回测。这相当于考试前先看答案,然后说自己考了100分。正确的做法是:把数据分成训练集和测试集,训练集用来优化参数,测试集用来验证效果。

好了,这一章我们聊了过拟合的本质。说白了,就是你的策略在历史数据上「背答案」背得太好,换一套题就露馅。下一章,我会具体讲讲怎么用数学方法诊断过拟合,包括那些我常用的指标和工具。


专注资料整理