规则可以写得无懈可击,引擎可以完全公平,检验结果却仍可能产生误导,原因在于输入的数据并非交易者当时所能看到的数据。数据错误很少让策略显得更差,几乎总是让它显得更好,这也正是这些错误得以留存的原因:对于自己满意的结果,没有人会去查找漏洞。本课介绍对规则化股票交易最重要的五类陷阱。
幸存者偏差
今天向数据商索取「成交最活跃的 500 只美股」,您得到的必然是至今仍然存在的公司。2000 年以来破产、长期下跌后退市或被收购的公司都不在其中。把今天的名单回溯到 2000 年进行检验,实际上是在检验一个由事后之见挑选出的「未来赢家」组合。
对于在大范围个股名单上只做多的规则,且检验期较长时,这一影响最大;对于 SPY 等指数 ETF 的检验影响最小,因为 ETF 持有的是当时的指数成分股,其价格本身已包含了失败的公司。
彻底的解决办法需要无幸存者偏差的数据:既包含退市公司,又记录每个日期哪些股票属于某个指数。这类数据确实存在,但价格不菲,其授权条款也很少允许向他人展示。一个可行的部分解决办法是让基准带有同样的偏差。Clear Tape 的验证期结论把策略与同一组股票的等权买入持有进行比较:双方包含同样的未来赢家,比较时大部分偏差会相互抵消。Clear Tape 还在每个结果中注明只测试目前仍在上市的股票,并将基于 500 只股票名单的检验标注为「偏差:高」,因为这份名单是按今天的成交活跃度选出的。
前视偏差
前视偏差是指使用了决策当时尚不可得的信息。它容易产生却难以察觉,因为代码照常运行,结果看起来也合乎情理。常见形式包括:
- 同一根 K 线内的决策。在开盘时依据当天的收盘价、最高价或最低价作决定。「若当天收盘突破 20 日高点,则在开盘时买入」这样的规则根本无法交易。
- 指标错误地包含当前 K 线。拿今天的收盘价与已经包含今天的 20 日高点比较。
- 事后选定的名单。用今天的指数成分股、今天的行业分类或今天的「最活跃」排名,去界定过去的股票范围。
- 修订后的数据。使用经后来修订的经济或公司数据,而非最初公布的数值。
- 全样本统计量。用整段历史的均值和标准差对信号做标准化,而整段历史包含了未来。
防范方法是一条时间线:对规则用到的每一项数据,写下它可被获知的时刻,并核对每项决策都发生在其后。收盘生成信号、次日开盘成交,是最稳妥的默认做法。一项非常有力的检验方法是:删除某个日期之后的所有数据,再重新运行。若该日期之前的结果有任何变化,说明有环节读取了未来。Clear Tape 的验证期回测正是围绕这一性质设计的:删除 2014 年之后的全部价格,训练期结果必须保持不变。
拆股、股息与价格调整
公司实施 1 拆 10 时,股价一夜之间下跌 90%,持有人的股数则变为原来的十倍,价值并无变化。但在原始价格数据中,这看起来就是一次暴跌。任何跨越拆股读取原始价格的规则,都会看到一次从未发生的崩盘:止损被触发、52 周高点变得遥不可及、均线骤然跳变。
因此数据商会提供调整后的价格。常见的调整有两种:
- 拆股调整重新缩放历史价格,使拆股不留缺口。所有基于价格的信号都应使用经拆股调整的数据。
- 股息调整还会按每次派息下调此前的价格,使调整后的序列表现得像一个总收益指数。它便于衡量收益,却改变了过去的价格水平:一只 2015 年实际成交价为 50 美元的股票,在今天的调整序列中可能显示为 41 美元,而且这一数字会随着新的派息不断变化。
稳妥的做法是将两者分开:信号使用经拆股调整的价格计算,与交易者当时实际看到的价位一致;股息则在派发时作为现金计入。Clear Tape 的验证期回测正是这样处理的。无论采用哪种方法,都要对策略和基准一视同仁(见第 3 课)。
退市股票与时点数据
另有两处缺口需要补充说明。
退市股票。即使能取得退市公司的价格历史,检验还需要知道最后发生了什么:现金收购会按收购价兑付,破产则可能让股票几乎一文不值。若检验只是止于最后一根可得的 K 线,就会对两种情形一视同仁,通常还会漏掉最后那笔亏损。对于倾向于买入大幅下跌股票的规则,这一缺口代价尤其大,因为这类股票最有可能消失。
时点数据。公司数据在季度结束数周后才公布,有时数月后还会被重述。如果数据库只保存最新的修正数字,并将其回填到季度末,检验就会依据当时无人知晓的数字行事。时点数据(point-in-time)则记录每个数字在各个日期的已知值。
指数成分、分析师预期和经济数据同样如此。Clear Tape 的规则只由价格和成交量构成,因此其回测内部不会出现这一陷阱;但若您在其他平台上运行使用基本面数据的检验,这一点仍需重视。
如何应用
入场
检验之前,写明数据来源、调整方式、是否包含退市股票,以及每项输入可被获知的时刻。
止损
若结果依赖于今天选定的股票名单,请将其与同一名单的买入持有进行比较,并解读两者的差距,而不是绝对收益。
目标
理想的检验是:每项输入都在相应决策之前可得,价格经拆股调整,策略与基准对股息的处理一致,剩余的偏差与结果一并说明。
失效条件
删除后期数据后结果发生变化、价格序列在拆股前后出现缺口,或以事后界定的股票范围对比无偏差的基准:请先修正数据,再解读结果。
常见错误
- 把今天的指数成分股或最活跃股票回溯检验二十年,再与 SPY 比较。
- 跨越拆股使用原始价格。
- 以股息调整后的策略对比只按价格计算的基准。
- 把从数据中消失的股票当作已按最后价格卖出。
- 把重述后的基本面数据当作季度末即已知晓。
小结
数据陷阱几乎总是美化检验结果。幸存者偏差源于只测试仍然存在的公司;以同一组股票为基准可以抵消其中大部分,且应在每个结果中加以说明。前视偏差源于在信息可得之前就使用它;写下时间线并进行「删除未来」检查,可以发现其中大部分。信号应基于经拆股调整的价格,策略与基准对股息的处理方式应保持一致。退市公司和重述的基本面数据,则需要专门构建的数据来处理。下一课将从检验转向市场:如何开始交易一条通过检验的规则,以及如何判断它已经失效。
仅供学习与参考,不构成投资建议。