滚动回测(Rolling / Walk-Forward Backtest)是量化投资与时序建模中用于验证策略时效性的动态评估方法。它通过随时间推移不断滑动训练与测试窗口,真实模拟策略在实盘中定期重新训练、参数微调与再平衡的全过程。
与传统“一次性划分训练集与测试集”的静态回测不同,滚动回测能够有效检验模型在面对市场结构变化(Regime Switch)时的适应能力。
一、 滚动回测的两种主流模式
根据历史训练数据的累积方式,滚动回测主要分为以下两种窗口类型:
| 模式 | 训练集变化特征 | 示意图 / 逻辑 | 适用场景 |
|---|---|---|---|
| 固定窗口 (Rolling Window) | 长度固定WWW。随着时间推进,丢弃最旧的数据,加入最新的数据。 | [t−W,t]→[t−W+Δt,t+Δt][t - W, t] \rightarrow [t - W + \Delta t, t + \Delta t][t−W,t]→[t−W+Δt,t+Δt] | 市场结构变化快、旧数据容易失效或产生噪音的场景(如高频交易、动量策略)。 |
| 扩展窗口 (Expanding Window) | 起点固定。随着时间推进,训练集范围不断扩大,吸收所有历史数据。 | [T0,t]→[T0,t+Δt][T_0, t] \rightarrow [T_0, t + \Delta t][T0,t]→[T0,t+Δt] | 数据量相对稀缺、模型需要长周期历史来识别稳健模式的场景(如基本面选股、宏观周期策略)。 |
二、 标准工作流程
滚动回测的执行可以拆解为以下 5 个循环步骤:
- 设定窗口参数:确定训练窗口长度WtrainW_{\text{train}}Wtrain(如 12 个月)和预测/持仓步长Δt\Delta tΔt(如 1 个月)。
- 样本内训练 (In-Sample):使用区间[t−Wtrain,t)[t - W_{\text{train}}, t)[t−Wtrain,t)的历史数据进行特征工程、模型拟合或参数优化。
- 样本外预测 (Out-of-Sample):将训练好的模型应用在紧随其后的样本外区间[t,t+Δt)[t, t + \Delta t)[t,t+Δt)上,生成交易信号并计算收益率。
- 窗口向前推进:将时间起点与终点同步向前平移步长Δt\Delta tΔt。
- 绩效拼接与评估:重复步骤 2~4 直至覆盖全周期,将所有样本外区间[t,t+Δt)[t, t + \Delta t)[t,t+Δt)的收益率序列无缝拼接,最终计算全周期的夏普比率、最大回撤等指标。
三、 核心优势
- 防范概念漂移 (Concept Drift):金融市场具有非平稳性(Non-stationarity),历史有效的因子可能会逐渐失效。滚动回测验证了策略通过定期重训修正参数的能力。
- 贴合实盘交易逻辑:实盘策略通常每周或每月重新跑模型更新权重,滚动回测的样本外收益拼接直接反映了这一真实调仓过程。
- 降低过拟合与数据窥探风险:传统静态分割容易因恰好切分在某个特殊行情(如牛市或极端崩盘)而产生过拟合假象,滚动回测由多个独立的 OOS(Out-of-Sample)区间组成,结果更具统计显著性。
四、 实操注意事项与常见陷阱
- 引入数据隔离带 (Purging & Embargo):如果预测目标或特征包含跨期重叠(例如预测未来 5 天的累计收益率),训练集中靠近区间末端的数据会包含测试集未来的信息。此时必须在训练集与测试集之间人为插入一段隔离带(Embargo Period),防止信息泄露。
- 交易成本与换手率惩罚:在每个Δt\Delta tΔt节点重新训练模型可能会导致持仓权重剧烈变动。若步长设置过短(如每日滚动),极高的换手率和印花税/滑点可能会抹平所有超额收益。
- 计算资源消耗:每次滑动都需要重新执行完整的模型训练过程,在大规模数据集或复杂深度学习/树模型上计算开销较大,通常需要并行计算加速。