简短回答
回测的可信度取决于时间是否用对。每一条数据至少有三个不同的时点:它描述的时期、它变得可得的时刻,以及你实际能据此成交的时刻。规则只能使用在决策之前已经可得的数据,成交也只能发生在决策之后的价格上。使用了当时尚不可得的数据叫作前视偏差。它会使结果失真,最常见的是让结果好过当时真正能做到的操作。
一条假设的时间线
以下日期和时间是为说明概念而虚构的,不涉及任何真实公司或市场。这个例子假设:模型只在常规交易时段交易、按下一个交易时段的开盘价成交,且 4 月 29 日是交易日。这些只是例子的假设,并不描述任何市场:请核对你所研究市场的交易时段与交易日历。
| 时间 | 发生了什么 |
|---|---|
| 3 月 31 日 | 季度结束。报告将描述这个季度。 |
| 4 月 28 日 16:45 | 报告在当天收盘后提交并被受理。 |
| 4 月 28 日,几分钟后 | 报告对公众可得。 |
| 4 月 29 日开盘 | 在这个模型下,基于这份报告的交易最早可以成交的时刻。 |
用这条时间线时常见的两个错误:
- 把数据日期记为报告期末。 如果把报告当作 3 月 31 日就已知,回测会提前四周根据它交易。
- 按提交当天的收盘价成交。 报告在 4 月 28 日收盘后才出现,当天收盘价已经过去。在这个模型下,最早的现实价格是 4 月 29 日开盘价。
受理和可得也不是同一个时刻。例如,美国 SEC 的 EDGAR 系统会记录每份文件的受理日期和时间,而 SEC 说明,没有时间戳能表明文件内容何时首次出现在 sec.gov 上。文件通常在几分钟内出现,但这个延迟并无保证。严谨的回测会预留余量,而不是直接假设受理时间就是可得时间。
五项检查
- 记录可得时点,而不是所属时期。 每个数据字段都保存它变得可得的时间,而不是它所描述的日期。
- 用对时钟和日历。 把可得时间换算到该市场的时区和交易日历。在模型所交易的最后一个时段之后发布的数据,只能在模型交易的下一个时段使用,而那不一定是下一个自然日。
- 把信号和成交分开。 决策只用决策之前可得的数据;成交用之后的价格,例如下一个开盘价。
- 使用当时存在的版本。 数据常常被修订。应使用每次决策当时已经可得的版本,不能把之后的修订回填到过去。
- 使用当时的样本范围。 在每个日期都用当时存在的证券来测试,包括后来退市或被合并的证券。只用今天仍存在的证券来测试,就是幸存者偏差。
适用边界
这是一份方法检查清单,不是任何特定市场、交易所或数据商的规则。发布时间、交易时段和数据修订做法各不相同,请对照你所研究市场的一手资料核实。