6.1 回测的本质
用历史数据模拟真实交易。核心难点:不让未来信息泄露到过去的决策中。
6.2 样本内 vs 样本外
全部历史: |-----IS-----|----OOS----|
样本内(训练) 样本外(验证)
- 样本内(In-Sample):用来"发现"策略参数
- 样本外(Out-of-Sample, OOS):用来"验证"策略
6.3 前视偏差(Look-Ahead Bias)
在 t 时刻使用了 t+1 时刻才知道的信息。最常见的形式:
- 用年报数据时,用了公告日之前的数据(财务数据应在公告日后才能用)
- 用全样本做标准化时,均值和标准差包含了未来数据
防范:横截面处理(每个时间点独立标准化),PIT(Point-in-Time)对齐。
6.4 幸存者偏差(Survivorship Bias)
回测时只用了"现在还活着"的股票,排除了已经退市的股票。这会让回测结果看起来比实际好(因为退市的往往是表现差的)。
防范:使用 as-of 截面数据,包含当时所有可交易的股票。
6.5 过拟合
策略记住了历史的噪声,而非学到了真实的规律。
检测方法:
- IS/OOS 衰减率:OOS 夏普远低于 IS → 过拟合
- 参数敏感性:只有某一个精确参数好 → 过拟合(好的策略应该是"高原",不是"孤岛")
- 随机对照:用随机标签训练 → 如果仍然有信号 → 过拟合
数据挖掘偏差(Data Snooping):尝试的参数组合越多,最好的结果越可能来自运气。Bonferroni 校正:如果 k 组参数,使用 p < 0.05/k 作为显著性阈值。
6.6 提高鲁棒性的方法
| 方法 | 原理 |
|---|---|
| 减少参数 | 参数越少,搜索空间越小 |
| 样本外验证 | 必须用未参与调参的数据验证 |
| 交叉验证 | 滚动窗口 + 多段验证 |
| 简单模型优先 | 2 参数策略比 10 参数策略更容易在样本外存活 |
6.7 滚动窗口回测(Walk-Forward)
窗口1: [训练2000-2002] → 最优参数P1 → [验证2003]
窗口2: [训练2001-2003] → 最优参数P2 → [验证2004]
窗口3: [训练2002-2004] → 最优参数P3 → [验证2005]
每个窗口只使用此前数据选择参数,OOS 收益 = 所有验证窗口拼接。这是专业量化中最严谨的参数选择方法。
6.8 Purged Walk-Forward
在标准 Walk-Forward 基础上,训练集和测试集之间留出空窗(Purge),防止信息泄露(同一只股票同时出现在训练和测试中)。
6.9 紧缩夏普比率(Deflated Sharpe Ratio, DSR)
扣除"多次试验后最优看起来很好"的运气成分。DSR > 0.95 才算可信。