前瞻偏差:你的回测用到了当时不可能有的信息

前瞻偏差,是测试用到了在测试那一刻还不可用的信息,比如后来修订的数字或未来的价格。它让回测看起来比实盘会好得多。

MyTrade Academy 编辑部
7 分钟阅读

一个看起来很棒的回测,可能无意中作弊:用了后来才修订的数字、后来才变化的成分,或者在被测试那一刻之后才知晓的价格。

这就是前瞻偏差,也是历史结果比策略实盘实际会交付更好的最安静的方式之一。

TL;DR

前瞻偏差,是测试用到在被测试那一刻还不可用的信息。常见来源:修订过的财务数字、后来才变化的指数成分、或者未来价格漏进信号。它会让回测结果虚高,避免方法是让每个数据点的可用时间和被测试时刻匹配。

前瞻偏差是什么

测试把一个决定当成是在某个历史时刻做出的。当测试把那个时刻实际上还不可用的信息喂给决定时,前瞻偏差就发生了。

最常见的来源是后来修订或晚些发布的数据:被重新陈述的财务数字、发生变化的指数成分,或者发布时间早于信息真正公开的新闻时间戳。

前瞻偏差的常见来源
来源怎么漏进来怎么避免
修订数字用今天重述的数字测过去用当时报告的版本
未来成分测后来才加入指数的公司用当时存在的成分
新闻时间戳假设信息在公开前就已知把可用时间和测试日期匹配

为什么它会让结果虚高

当时还不可用的信息,给了策略一个免费的优势:它根据真实交易者从没有过的知识行动。

虚高的结果看起来像能力,因为回测完美无瑕,但优势来自未来,而不是来自策略。

示例:50 笔交易,用修订数据和用当时可知数据回测同一策略
项目用后来修订的数据(前瞻偏差)只用当时可知的数据
胜率64%(32 / 50 笔)46%(23 / 50 笔)
平均盈利400 元 / 笔400 元 / 笔
平均亏损250 元 / 笔250 元 / 笔
期望值+166 元 / 笔+49 元 / 笔

同一批 50 笔交易,只是把财务数字换成了当时真正能看到的版本,就少了 9 笔“胜利”,期望值缩水到不足三分之一。

用修订数据的胜率64%(32/50)
用修订数据的期望值+166 元 / 笔
用当时数据的胜率46%(23/50)
用当时数据的期望值+49 元 / 笔
3.4 倍的期望值,来自 9 笔本不该赢的交易

同样的 50 笔交易,把后来才修订的数字换成当时真正能看到的版本,胜率从 64% 掉到 46%,期望值从 166 元跌到 49 元。多出来的那 9 笔“胜利”,靠的是策略在当时根本拿不到的信息。

怎么检查

对测试用到的每个输入,问它什么时候真正可用。修订的数字只应在它的发布日期之后进入测试;成分变化只应在变化发生之后。

实用的检查是时间戳纪律:每个数据点按它何时可知来标注,而不是按它描述的时期。

让数据可用时间和被测试时刻匹配

偏差不在于数据对它描述的东西是否准确,而在于数据是否比真实时间更早可用。一个对季度说得对的数字,如果发布得晚,对测试仍然是错的。

前瞻偏差和过拟合的区别

过拟合把规则拟合到历史样本里的噪声。前瞻偏差把规则手里没有的信息交给它。两者都让回测看起来比实盘好,但是两种不同的失败,修复方式也不同。

过拟合靠测试未见过的时期修复;前瞻偏差靠把每个输入的可用时间和测试日期匹配修复。

常见问题

用最准确的数字总是对的吗?

不是。最准确的当前数字在测试日期可能还不存在。测试应该用当时可知的版本。

前瞻偏差常见吗?

足够常见,任何严肃的回测都把它当成标准检查,尤其是修订的基本面或成分数据。

事后能修吗?

如果数据允许重建每个日期可知的内容,测试可以重做正确。做不到的话,结果不可信。

相信回测之前,先检查可用时间

第 44 课解释过拟合、参数风险,以及怎么用独立时期验证策略。

打开第 44 课