第56课讲了过拟合,第57课讲了参数平原,第58课讲了分年度检验。现在到了最后一道防线:样本外检验,以及它的进阶版本——滚动回测(Walk-Forward)。
样本内 vs 样本外的切割
做回测的完整流程应该是:
- 1. 样本内(In-Sample):用来探索、调参、验证假设。可以多次查看、反复修改。
- 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. 取前 N 年数据作为样本内,跑参数优化,选出最优参数
- 2. 把这套参数固定,在接下来的 K 年做样本外测试
- 3. 把时间窗口向前滚动 K 年,重复步骤 1–2
- 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. 先选 2016–2022 跑回测,查看参数实验室的热力图,选出稳健参数区
- 2. 把选出的参数固定,单独选 2023年至今 跑一次回测
- 3. 对比两次的超额、胜率、最大回撤,判断 WFE(IS 表现 vs OOS 表现)
- 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 反映缩减比例;符号相反时,代表策略方向发生了反转)。历史统计不代表未来表现,不构成投资建议。
读到这里,不如自己验证一次
文章里的逻辑,你可以在青柠量化里用真实数据重新跑一遍。免费,零代码。
[…] 3. 如果样本外表现与样本内接近(WFE > 0.5),说明策略有一定稳健性;见第59课样本外检验 […]