一个看起来很棒的回测,可能无意中作弊:用了后来才修订的数字、后来才变化的成分,或者在被测试那一刻之后才知晓的价格。
这就是前瞻偏差,也是历史结果比策略实盘实际会交付更好的最安静的方式之一。
前瞻偏差,是测试用到在被测试那一刻还不可用的信息。常见来源:修订过的财务数字、后来才变化的指数成分、或者未来价格漏进信号。它会让回测结果虚高,避免方法是让每个数据点的可用时间和被测试时刻匹配。
前瞻偏差是什么
测试把一个决定当成是在某个历史时刻做出的。当测试把那个时刻实际上还不可用的信息喂给决定时,前瞻偏差就发生了。
最常见的来源是后来修订或晚些发布的数据:被重新陈述的财务数字、发生变化的指数成分,或者发布时间早于信息真正公开的新闻时间戳。
| 来源 | 怎么漏进来 | 怎么避免 |
|---|---|---|
| 修订数字 | 用今天重述的数字测过去 | 用当时报告的版本 |
| 未来成分 | 测后来才加入指数的公司 | 用当时存在的成分 |
| 新闻时间戳 | 假设信息在公开前就已知 | 把可用时间和测试日期匹配 |
为什么它会让结果虚高
当时还不可用的信息,给了策略一个免费的优势:它根据真实交易者从没有过的知识行动。
虚高的结果看起来像能力,因为回测完美无瑕,但优势来自未来,而不是来自策略。
| 项目 | 用后来修订的数据(前瞻偏差) | 只用当时可知的数据 |
|---|---|---|
| 胜率 | 64%(32 / 50 笔) | 46%(23 / 50 笔) |
| 平均盈利 | 400 元 / 笔 | 400 元 / 笔 |
| 平均亏损 | 250 元 / 笔 | 250 元 / 笔 |
| 期望值 | +166 元 / 笔 | +49 元 / 笔 |
同一批 50 笔交易,只是把财务数字换成了当时真正能看到的版本,就少了 9 笔“胜利”,期望值缩水到不足三分之一。
同样的 50 笔交易,把后来才修订的数字换成当时真正能看到的版本,胜率从 64% 掉到 46%,期望值从 166 元跌到 49 元。多出来的那 9 笔“胜利”,靠的是策略在当时根本拿不到的信息。
怎么检查
对测试用到的每个输入,问它什么时候真正可用。修订的数字只应在它的发布日期之后进入测试;成分变化只应在变化发生之后。
实用的检查是时间戳纪律:每个数据点按它何时可知来标注,而不是按它描述的时期。
偏差不在于数据对它描述的东西是否准确,而在于数据是否比真实时间更早可用。一个对季度说得对的数字,如果发布得晚,对测试仍然是错的。
前瞻偏差和过拟合的区别
过拟合把规则拟合到历史样本里的噪声。前瞻偏差把规则手里没有的信息交给它。两者都让回测看起来比实盘好,但是两种不同的失败,修复方式也不同。
过拟合靠测试未见过的时期修复;前瞻偏差靠把每个输入的可用时间和测试日期匹配修复。
常见问题
用最准确的数字总是对的吗?
不是。最准确的当前数字在测试日期可能还不存在。测试应该用当时可知的版本。
前瞻偏差常见吗?
足够常见,任何严肃的回测都把它当成标准检查,尤其是修订的基本面或成分数据。
事后能修吗?
如果数据允许重建每个日期可知的内容,测试可以重做正确。做不到的话,结果不可信。


