研究方法 偏差控制

第 3 章

偏差控制与验证

大多数散户回测都会受到系统性偏差的影响,使结果看起来远好于现实。我们已识别出六种最常见的偏差,并针对每一种建立了严格的控制机制。

01

前视偏差

危害最大

定义

前视偏差是指策略使用了在做出交易决策时实际上无法获得的信息。最常见的形式,是用第 T 根 K 线的收盘价产生信号,然后同样以第 T 根 K 线的收盘价执行交易。现实中,收盘价要等 K 线收盘后才能知道,而此时市场已经收盘。

✗ 有偏差(多数散户工具的做法)

在第 T 根 K 线收盘时产生信号 → 同样按第 T 根 K 线收盘价成交。这在现实中不可能实现——你无法以刚刚才知道的价格进行交易。

✓ 我们的做法

在第 T 根 K 线收盘时产生信号 → 交易排队等待 → 按第 T+1 根 K 线开盘价成交。这是现实中最早可以执行的价格。

我们同时防范的其他前视偏差形式

  • 使用第 T 根 K 线的最高价/最低价触发止损——这些数值要等 K 线收盘后才能知道
  • 指标计算引用了“未来”的周期(例如居中移动平均线)
  • 使用整个数据集的最小值/最大值进行标准化,而不是滚动最小值/最大值
  • 策略参数在整个区间内优化,然后又在同一区间内测试
  • 盈利超预期信号在公告日期之前就使用了实际每股收益(EPS)
02

幸存者偏差

高估风险

幸存者偏差是指回测只纳入目前仍在交易所上市的股票。在测试期间破产、被收购或退市的公司被排除在外——尽管它们在当时都是有效的交易标的。结果是历史收益看起来比实际好得多,因为所有“输家”都已被悄悄地从数据集中剔除。

对恒生指数成分股范围的量化影响:

~15–20%

在 10 年回测中,恒指成分股的历史记录至少包含一只已退市股票

~3–8%

动量策略因幸存者偏差而高估的典型年度收益

100%

我们的回测在历史股票范围中全部包含已退市证券

✗ 有偏差的股票范围

只对目前标普 500 指数内的 500 只股票进行测试,过往所有破产、退市及被剔除的个案均被排除。收益偏差:每年 +3% 至 +8%。

✓ 我们的做法

每个历史日期的股票范围,均包含当日所有已上市的股票——包括之后退市或破产的股票。即时点(point-in-time)股票范围构建。

03

过拟合(曲线拟合)偏差

最为常见

过拟合是指策略在历史数据上被过度优化,以至于实际上只是“记住”了过去,而没有学到可以推广的规律。一个有 12 个参数、全部用 3 年数据调优的策略,会呈现出亮眼的历史表现,却会在实盘交易中立刻失效。

我们如何检测并防止过拟合

最少参数数量

我们倾向于采用自由参数少于 5 个的策略。每增加一个参数,曲线拟合的风险就会翻倍。

参数敏感度测试

我们将每个参数上下调整 ±10–20%,并衡量对收益的影响。稳健的策略呈现平滑而平坦的曲面,而不是尖锐的峰值。

交叉验证

我们把历史区间划分为 5 个互不重叠的区段,并衡量所有区段之间结果的一致性。

最少交易次数

交易少于 50 次的回测,统计证据不足。我们要求至少 100 次完整的往返交易。

蒙特卡洛模拟

我们将交易顺序随机打乱 10,000 次,以衡量收益分布,以及随机排序下的最坏情形。

04

选择偏差

常被忽视

选择偏差是指选取哪些标的进行回测,在有意或无意之间受到这些标的过往表现的影响。如果只在过去十年涨幅最大的股票上测试动量策略,结果必然带有偏差。

标的选择

我们在查看结果之前先确定交易范围。范围标准基于客观筛选条件:市值、流动性、行业——而不是历史表现。

时间区间选择

我们使用每个标的可获得的完整历史,而不是刻意挑选的区间。如果测试 2010–2024 年,就会包含 2015 年中国股灾、2018 年调整以及 2020 年新冠股灾。

策略选择

我们记录所有测试过的策略,而不仅仅是有效的那些。发表偏差(只展示表现好的结果)也是选择偏差的一种。

基准选择

用于比较的基准在测试开始前就已确定。我们不会在看到结果后更换基准,以使相对表现看起来更好。

05

优化偏差

参数风险

优化偏差是过拟合的一种特定形式。当你对数百种参数组合进行网格搜索并挑选表现最佳者时,你找到的并不是“真正”的最优参数,而是由于随机噪声恰好在该段历史区间表现最好的参数。

说明:为什么“最佳”参数具有误导性

在同一组数据上测试 100 种参数组合 → 在 5% 显著性水平下预期的假阳性:约有 5 个策略仅凭巧合就看起来表现良好
测试 1,000 种组合 → 预期假阳性:约 50 个。“最佳”策略可能完全是随机结果。
我们的做法:先确定参数 → 根据经济逻辑选择参数,只测试一次,并在不做进一步修改的情况下报告该结果。

我们的优化规则

  • ● 策略参数在运行样本内回测之前就已设定
  • ● 如果使用优化,只在训练集上进行——绝不在验证集上进行
  • ● 我们会报告优化曲面(而不仅仅是峰值),让读者可以看到稳健程度
  • ● 我们倾向选用位于平坦高原的参数值,而不是狭窄的峰值
  • ● 滚动前推优化:定期重新优化参数,模拟真实的自适应管理
06

样本外验证

最后关卡

样本外(OOS)测试是最重要的验证步骤。策略在训练集上开发并优化完成后,会在一段完全独立的保留区间内测试一次。OOS 结果不能用于进一步修改策略——否则该保留区间就不再是真正的样本外。

15 年回测的典型数据划分

训练期 (60%)
策略开发
验证期
(20%)
OOS 保留期
(20%)
第 1 年 第 9 年 第 12 年 第 15 年

滚动前推测试

滚动前推测试是更精细的 OOS 测试形式,模拟真实交易者定期重新优化策略的过程。我们不采用单一固定的训练/测试划分,而是使用滚动窗口:用最初 N 根 K 线优化,在随后 M 根 K 线上测试,向前推进 M 根 K 线,然后重复。

滚动窗口

我们使用 12 个月的优化窗口,每次向前推进 3 个月,每个窗口相互独立。

一致性检查

我们衡量滚动前推表现与样本内表现的比率。比率高于 50% 表明策略稳健。

两者并列呈现

所有报告均并排展示样本内与滚动前推(样本外)结果,确保完全透明。

偏差控制摘要

偏差类型 典型影响 我们的控制 状态
前视偏差 影响极大——可使报告收益翻倍 下一根 K 线开盘价执行;事件驱动引擎 已控制
幸存者偏差 年度收益高估 +3–8% 包含已退市股票的即时点股票范围 已控制
过拟合 策略在实盘交易中失效 参数敏感度;蒙特卡洛;≥100 次交易 已控制
选择偏差 只展示刻意挑选的优胜者 预先确定股票范围;完整历史;报告所有测试 已控制
优化偏差 虚假的“最优”参数 经济逻辑;滚动前推;偏好平坦高原 已控制
缺少 OOS 验证 样本内结果 ≠ 实盘结果 60/20/20 划分;滚动前推测试 已控制