如果股票回测剔除了已退市公司,就可能在悄悄抹去一些最糟糕的结果时,仍报告亮眼的收益。问题往往始于一个实际选择:下载今天的股票代码列表,再用这些代码回测过去10年。这样的列表天生只包含幸存者。
要让已经倒下的公司留在研究股票池中,光添加几个旧代码还不够。你需要知道哪些证券在什么时间存在、何时进入或离开某个交易场所,以及它们最终的价值如何处理。3种常见的捷径会以不同方式丢失这段历史。
错误 1:把今天的成分股用于每一年
想象一下,从2010年开始,用当前的标普500成分股测试月度动量策略。那些倒闭、被合并或被剔出指数的公司,在每次再平衡时都不见了。你的策略从未有机会买入未来的输家,而历史股票池保留的都是最终表现足够成功、得以留在其中的公司。
结果通常是平均收益被抬高、回撤看起来更平稳,策略似乎偏好动量或质量这类简单因子。这些信号或许确实存在。但测试还悄悄赋予了它们一项优势:知道谁活了下来。
使用时点成分信息。在每次再平衡时,符合条件的集合应仅包含按当时可用信息满足规则的证券。成分资格需要有生效日期;如果策略交易的是更广泛的股票池,还要包括两次定期指数审查之间的变更。
错误 2:把缺失的代码当作缺失数据
现代供应商文件中找不到的股票代码,很容易被跳过。加载器发现没有近期记录,就把该代码标记为过时并剔除。代码可能会记录一条警告,但回测仍会继续,数据面板看起来更整洁,却没有留下被排除证券的记录。
有些证券因合并或收购而消失。另一些则因财务困境、破产或不符合上市规则而退市。它们最后一次普通收盘价未必代表投资者实际收到的价值。如果一只陷入困境的股票停牌前价格为 $0.40,之后又被注销,却假设持仓仍以 $0.40 计价,组合里就可能永远留着一笔毫无价值的持仓。直接剔除它,则可能把亏损彻底抹掉。
维护一份证券主数据表,记录上市和退市日期、原因代码,以及适用时的继承证券或现金对价。退市事件应根据持有人实际收到的对价平仓或转换持仓。具体处理取决于事件和金融工具;一条通用的“最后价格”规则无法涵盖所有情况。
| 事件 | 持仓可能变成什么 | 需要核查的回测处理方式 |
|---|---|---|
| 现金收购 | 按交易条款支付现金 | 在生效日记录现金所得 |
| 换股合并 | 继承公司的股份 | 应用换股比例,并以继承证券继续持有 |
| 破产注销 | 可收回价值很少或为零 | 根据相关分配或注销记录处理持仓 |
错误 3:修补股票池,却跳过收益处理
加入历史成分股只能解决选择问题。如果收益序列在最后一次普通收盘时就结束,仍可能遗漏退市收益。如果加入退市收益,却把它应用到已经包含终止事件的价格序列上,就可能把亏损计算两次。不同供应商的惯例各不相同,仅凭字段名称未必能判断文件采用了哪种惯例。
假设一只股票从 $10 跌到 $1,随后退市,报告的终止收益为 −80%。如果你先计算出 90% 的价格跌幅,再乘上单独的 −80% 退市收益,合并亏损就会达到 98%,显然不合理。问题在于把描述同一段价格变化中重叠部分的两种度量合并了。
计算组合收益前,先记录普通收益是否包含分配和退市结果,以及每项收益涵盖的日期区间。从原始观测到最终组合价值,核对若干已知公司行动。检查跨越事件期间持有的仓位;单只证券的图表看起来可能合理,但组合台账可能把所得记在了错误的日期。
股票代码消失时,应把它视为需要解释的事件。不要因为数据文件不再报告这家公司,就推断它不再重要。
如何检查考虑退市因素的回测?
比较 Sharpe 比率前,先统计数量和覆盖情况。逐年报告符合条件的证券数量、退市数量,以及因数据问题未解决而被排除的数量。然后从不同原因导致的退出中抽取样本,追踪每笔持仓直到其最终组合价值。
用包含和不包含已退市证券的股票池运行同一策略,但应把两者的差异视为数据质量诊断,而不是直接当作修正后的业绩估计。股票池规则、收益惯例和事件时点都必须与你要回答的问题相匹配。可靠的结果来自一份能解释每笔持仓何时进入、经历了哪些公司行动,以及最终留下多少价值的台账。
← 全部文章


