过拟合:回测越漂亮越危险

青 青柠量化
2026-10-17

调完参数、收益曲线漂亮,上了实盘就亏钱——这是量化交易最常见的坑,根本原因是过拟合(Overfitting)。参数记住了历史噪声,没有找到真正的规律。

光讲概念没用,直接上实验。


实验设计

策略:N 日累计跌超 X%,且当日收阳(超跌反弹型)。信号次日开盘买入,持有 H 个交易日后收盘卖出。

参数网格:

  • – N(统计跌幅的天数):3、5、10
  • – X(跌幅阈值):5%、10%、15%、20%、25%
  • – H(持有天数):1、3、5、10、20

共 3 × 5 × 5 = 75 组参数。

样本内:2016–2020 年,用来挑参数。
样本外:2021–2025 年,挑完之后只看一次,不再调整。

评价指标:日均超额 = 持有期超额收益 ÷ 持有天数(扣除同日全市场平均,以便不同持有期之间比较)。股票池全 A 股,排除 ST、北交所,股价不低于 3 元,后复权。


结果:样本内前10名,样本外表现如何

样本内排名 参数(N日/跌X%/持H日) 样本内信号数 样本内日均超额 样本内胜率 样本外信号数 样本外日均超额 样本外胜率 样本外排名
1 3日跌超25%,持1日 140 +1.29% 62.9% 208 −2.00% 40.9% 75
2 3日跌超20%,持1日 867 +0.74% 68.3% 1,336 −1.78% 43.6% 74
3 10日跌超25%,持3日 6,829 +0.24% 60.3% 7,320 +0.80% 76.6% 2
4 10日跌超25%,持1日 6,829 +0.24% 48.6% 7,320 +0.24% 63.0% 19
5 10日跌超20%,持1日 19,337 +0.22% 54.6% 19,609 +0.18% 60.1% 30
6 5日跌超25%,持1日 1,003 +0.21% 56.8% 1,693 −1.30% 41.2% 73
7 10日跌超25%,持5日 6,829 +0.18% 58.3% 7,320 +0.82% 77.0% 1
8 10日跌超20%,持3日 19,337 +0.17% 61.4% 19,609 +0.44% 69.6% 6
9 10日跌超20%,持5日 19,337 +0.15% 62.0% 19,609 +0.43% 69.7% 7
10 10日跌超20%,持10日 19,337 +0.13% 52.7% 19,609 +0.22% 70.9% 23

样本内第1、2名,在样本外分别排倒数第1、2名。 如果你在2020年底用这套参数优化选了「3日跌超25%,持1日」——样本内每天 +1.29%、胜率63%——接下来5年会稳定亏钱。


规律一:样本越小,排名越不可信

把75组参数按样本内信号数分成两类:

分组 组合数 样本内外排名相关系数
样本内信号 ≥ 3,000 60 +0.69
样本内信号 < 1,500 15 −0.77

信号多的组合,样本内好的样本外也大概率好(相关系数+0.69);信号少的组合,排名几乎完全反过来(−0.77)。

样本内第1名只有 140 个信号,5年平均每年28次。这么少的样本,几次运气好的大涨就能把平均数拉得很高,但它代表的不是规律,是噪声。


规律二:"挑出来的最优"不如"随便选"

选法 样本外日均超额
样本内前10名的平均 −0.20%
全部75组的平均 +0.07%

按样本内表现精挑细选出来的前10名,样本外平均反而不如75组随机选。原因是前10名里混进了样本少、靠运气排上去的参数组合。


规律三:持有期太短,噪声最大

持有天数 样本内日均超额 样本外日均超额
1 日 +0.18% −0.41%
3 日 +0.04% +0.23%
5 日 +0.05% +0.26%
10 日 +0.05% +0.15%
20 日 +0.05% +0.14%

持有1天的组合样本内看起来最好,样本外是唯一整体为负的持有期。「次日开盘到收盘」的日内波动噪声极大,加上实盘里每天换仓的手续费,这类参数很难真正盈利。


3个识别过拟合的方法

1. 先看样本量

信号数少于 1,000 的回测结果,收益数字基本不可信。还要看信号是不是集中在某一两年:如果大部分收益来自2015年或2024年,那它测的其实是那一年的行情。

2. 留一段样本外

把数据分成两段:前一段用来挑参数,后一段只用来验证,而且只验证一次。如果看了样本外结果再回去改参数,样本外也就变成了样本内了。这是最容易犯、也最难察觉的错误。

3. 看参数的"邻居"

好参数周围的参数也应该不错。「3日跌超25%,持1日」在样本内排第1,但它的邻居「3日跌超20%,持1日」排第2,样本外也是倒数。而「10日跌超20%,持5日」的邻居(10日跌超25%持5日、10日跌超15%持5日)在样本内和样本外都表现稳定。详见第57课的参数实验室。


常见误区

误区一:样本外只是用来"确认"的
错。样本外是用来证伪的,不是用来确认的。如果看到样本外结果不好就继续调,再拿新样本外看,循环三五次,那每段"样本外"都已经变成了样本内。

误区二:参数优化一定是有益的
不是。参数优化在信号量足够大的情况下有意义;信号量太小时,优化只是在挑一个运气好的参数。

误区三:总收益高就是好策略
不是。参考第58课批量回测——一个策略需要在分年、分牛熊中都表现稳定,才算经过了系统性检验。


在青柠中实操

青柠量化的回测报告提供分年超额统计,可以直接看策略在每一年的表现(见第58课)。做参数优化时,建议:

  1. 1. 选一段较早的年份(如2016–2022)作为样本内,在青柠参数实验室里跑参数网格
  2. 2. 记录最优参数后,用最近1–2年(2023至今)单独回测一次,不再调整
  3. 3. 如果样本外表现与样本内接近(WFE > 0.5),说明策略有一定稳健性;见第59课样本外检验
  4. 4. 如果样本外崩溃,说明参数是过拟合的,重新设计策略逻辑而不是继续调参

常见问题

Q:过拟合能完全避免吗?
不能完全避免,但可以控制。方法是:足够大的样本量(信号数 ≥ 1000)、严格的样本外测试(只看一次)、选参数平原而不是单一最优点、扣除交易成本后再评估。

Q:用机器学习做选股会不会更容易过拟合?
会。特征越多、模型越复杂,过拟合风险越高。机器学习在量化中需要额外的防过拟合措施(如 Purged Cross-Validation),普通的 k 折交叉验证不适用于时间序列数据。

Q:青柠的 Reality Check 评级是怎么算的?
青柠在全市场截面上验证策略信号的统计显著性,对信号量少的策略会给出风险提示。具体方法见青柠回测报告页面的说明。


口径说明

信号数为触发次数,同一只股票可多次计入。超额收益相对同日全部股票(非ST、排除北交所、价格 ≥3 元)的同口径均值。次日一字涨停买不进的信号剔除(记 NULL)。收益未计交易成本。历史统计不代表未来表现,不构成投资建议。

读到这里,不如自己验证一次

文章里的逻辑,你可以在青柠量化里用真实数据重新跑一遍。免费,零代码。

免费下载客户端

1 条讨论

写下你的看法

邮箱仅用于回复通知,不会公开。