样本外检验与滚动回测

青 青柠量化
2026-10-18

第56课讲了过拟合,第57课讲了参数平原,第58课讲了分年度检验。现在到了最后一道防线:样本外检验,以及它的进阶版本——滚动回测(Walk-Forward)。


样本内 vs 样本外的切割

做回测的完整流程应该是:

  1. 1. 样本内(In-Sample):用来探索、调参、验证假设。可以多次查看、反复修改。
  2. 2. 样本外(Out-Of-Sample):用来做最终验证。只看一次,看完后不再修改策略。

这个"只看一次"是核心纪律。如果看了样本外结果不满意,又回去改参数,再重新看"样本外",你做的事情实际上是把样本外数据也用来优化策略了——它也变成了样本内的一部分。循环几轮之后,整段历史都是你的样本内了。

常见的划分比例:70% 样本内 + 30% 样本外,样本外选最近的数据段(因为最近更接近实盘环境)。


实验:75组参数的样本内外表现

复用第56课的实验数据:75组参数,样本内 2016–2020,样本外 2021–2025。

按持有天数汇总:

持有天数 IS日均超额 OOS日均超额
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天的参数组合:样本内平均 +0.18%,样本外平均 −0.41%——不仅转负,而且绝对值比IS高出一倍多。持有5日及以上的参数组合,样本外表现均好于样本内,可能是2021–2025年的市场环境对超跌反弹策略更友好。


Walk-Forward Efficiency(WFE)

WFE(Walk-Forward Efficiency)是 Pardo (2008) 提出的衡量策略稳健性的指标:

WFE = 样本外表现 / 样本内表现

通用的解读标准:

  • – WFE > 1.0:OOS 优于 IS,可能是市场条件更好,也可能是策略真的有效
  • – WFE 0.5–1.0:可接受范围,OOS 保留了 IS 一半以上的优势
  • – WFE < 0.5 但 > 0:轻度过拟合,IS 的部分表现来自样本内噪声
  • – WFE < 0:OOS 整体为负,策略大概率过拟合

75组参数的 WFE 分布:

WFE 区间 组合数 占比
> 1.0(OOS 优于 IS) 49 65.3%
0.5 – 1.0(可接受) 7 9.3%
0 – 0.5(轻度过拟合) 3 4.0%
< 0(OOS 整体为负) 16 21.3%

WFE < 0 的16组参数,基本都是持有天数=1日、或者 N=3(统计天数)的组合——信号量少、持有期短,IS 的"优势"完全来自噪声。


三个典型案例

案例 参数 IS信号数 IS日均超额 OOS日均超额 WFE
尖峰崩溃 3日跌超25%,持1日 140 +1.29% −2.00% −1.55
平原稳定 10日跌超20%,持5日 19,337 +0.15% +0.43% 2.86
平原附近 3日跌超15%,持20日 5,015 +0.06% +0.15% 2.54
  • – 尖峰崩溃:WFE = −1.55,IS 越好,OOS 越差,是过拟合的教科书案例
  • – 平原稳定:WFE = 2.86,OOS 不仅没崩,反而更好(2021–2025年市场对超跌反弹更友好)
  • – 平原附近:WFE = 2.54,中等样本量,OOS 同样正常

注意:WFE 高不一定意味着策略"更好"。当 IS 表现较弱(IS 超额很低),WFE 的数值会被放大。WFE 主要用于判断策略有没有崩溃,而不是排名策略的优劣。


滚动回测(Walk-Forward Testing)

简单的样本外检验只把数据切成两段,还有一个更严格的方法:滚动回测。

滚动回测的步骤:

  1. 1. 取前 N 年数据作为样本内,跑参数优化,选出最优参数
  2. 2. 把这套参数固定,在接下来的 K 年做样本外测试
  3. 3. 把时间窗口向前滚动 K 年,重复步骤 1–2
  4. 4. 把所有样本外阶段拼接起来,得到一条"拟真实盘"的权益曲线

这个过程模拟了真实的策略生命周期:用历史选参数,在当时的"未来"检验效果,再更新参数,再检验。

用上面的数据做一次简化演示:把 2016–2020 当 IS(第一轮),2021–2025 当 OOS(第一轮验证)。第一轮里75组参数的"样本外拼接曲线",已经揭示了哪些参数区域有真实有效性。

扩展窗口 vs 滚动窗口:

  • – 扩展窗口:IS 从固定起点开始,每次加更多历史数据。优点是 IS 越来越多,缺点是早期数据权重下降缓慢
  • – 滚动窗口:IS 固定长度,向前滚动。优点是测试对近期市场的适应性,缺点是每次 IS 数据量有限

MA20金叉的样本外模拟

MA20金叉策略(第10课),把 2016–2021 作为样本内,2022–2025 作为样本外:

阶段 时间段 平均超额 平均胜率
样本内 2016–2021 −0.04% 47.5%
样本外 2022–2025 −0.13% 49.5%

WFE = −0.13 / −0.04 = 3.25——这是一个正值但容易误读的案例。IS 和 OOS 都是负超额,WFE 是正数,但实际上 OOS 比 IS 更差(更负)。

这说明:WFE 需要结合绝对值来读。当 IS 本身就是负超额时,WFE 的正负意义就不同了——这里应该看"OOS 的超额绝对值相比 IS 有没有明显恶化",而不仅仅看 WFE 的正负。

MA20金叉在样本外每年超额:

年份 超额 胜率
2022 −0.19% 46.2%
2023 −0.11% 44.5%
2024 −0.15% 47.7%
2025 −0.06% 59.6%

OOS 和 IS 的超额均为负,数量级相近,说明策略行为一致(没有过拟合导致崩溃),但策略本身确实不擅长超额收益,这是策略本身的特性(MA20金叉擅长在趋势市跟随大盘,不擅长超越市场平均)。


常见误区

误区一:样本外通过了就可以上线
通过了只是"必要条件",不是"充分条件"。还需要:分年稳定(第58课)、参数平原(第57课)、成本测试、滑点测试,以及理解策略为什么有效。

误区二:样本外时间越长越好
太长的 OOS 可能包含多个市场周期,如果市场结构发生变化,早期 OOS 数据的参考价值也会下降。一般用最近2–3年做 OOS,更接近未来的实盘环境。

误区三:WFE > 1 说明策略"更好"
WFE 主要用于判断"是否崩溃"。WFE 显著 > 1 往往是因为 IS 数据里有某种特殊情况(如2016–2020包含了2018年大跌)压低了 IS 表现,不一定代表策略真的变好了。


在青柠中实操

青柠量化支持在回测时设定时间段,可以:

  1. 1. 先选 2016–2022 跑回测,查看参数实验室的热力图,选出稳健参数区
  2. 2. 把选出的参数固定,单独选 2023年至今 跑一次回测
  3. 3. 对比两次的超额、胜率、最大回撤,判断 WFE(IS 表现 vs OOS 表现)
  4. 4. 如果 OOS 没有明显崩溃(WFE > 0.5),可以考虑进一步测试更多维度

青柠的分年统计功能(见第58课)可以直接在一次回测里看完所有年份的表现,节省来回切换时间段的步骤。


常见问题

Q:样本内应该用多少年数据?
没有固定答案。太少(如1–2年)会包含太少的市场周期;太多(如全部15年)OOS 时间段会太短,统计意义有限。通常用5–8年做 IS,留2–3年做 OOS 是较常见的做法。

Q:如果策略在2015年大牛市里有很多信号,会影响样本内结果吗?
会。2015年是极端的杠杆牛市,策略在当年的表现往往不具代表性。建议把样本内起点设在2016年后,或者单独看2015年是否是"异常年"。

Q:策略通过了样本外检验,上线后还需要继续跟踪吗?
必须。市场结构会变化,策略会失效。上线后应持续跟踪实盘信号的超额表现,如果连续一个季度的实盘超额显著偏离历史均值,需要重新评估策略是否仍然有效(见第62课信号中心)。


口径说明

数据同第56课口径。WFE = 样本外日均超额 / 样本内日均超额(两者符号相同时,WFE 反映缩减比例;符号相反时,代表策略方向发生了反转)。历史统计不代表未来表现,不构成投资建议。

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

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

免费下载客户端

1 条讨论

写下你的看法

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