回测可以让每根 K 线的时间戳都完全正确,却仍然用上了明天的信息。当策略把今天仍存续的资产拿来测试多年的历史数据时,就会发生这种情况,仿佛策略早已知道哪些市场会继续保持流动性、维持上市并值得纳入。
资产池构建本身就是策略的一部分。如果实盘系统在每个决策时点只能从当时可用的资产中选择,回测也必须遵守同样的边界。以下 3 种捷径经常会抹掉这条边界。
错误一:用今天的名单回测整个历史区间
假设你今天筛选出市值最大的 50 个加密货币永续合约,然后从 2021 年开始回测。这份名单排除了已经消失、流动性下降或被下架的合约,也让更早的日期能够使用当时可能尚未存在的市场。
问题很容易被忽略:由于失败的资产已从样本中消失,策略看起来会更稳定。比如,一条动量规则在今天的 50 个市场上可能表现出色,但按历史情况回测时,策略会反复配置到后来崩盘或失去交易所上市资格的资产。你测试的是一个根据结果筛选出的投资组合。
应将资产池成员资格记录为带日期的档案。对每项资产,追踪它何时具备入选资格、何时失去资格,以及原因。每次再平衡时,只使用当时可获得的信息应用规则。市场应在实际上市并满足任何必要的预热期后才纳入。如果市场退市,必须为其最终持仓定义退出或结算处理;直接删除该市场的数据行并不算退出规则。
错误二:按决策之后才测得的统计量排名
即便使用历史资产池,只要成员资格规则采用了包含未来数据的窗口,仍然会发生信息泄漏。“每月交易流动性最高的 20 只股票”听起来合理,直到你发现流动性排名用到了策略本该交易的整个月数据。
设想你在首个交易日进行再平衡。如果按当月平均美元成交额排名,就会在不知不觉中用接下来的 3 周来决定首日哪些股票符合条件。问题往往表现为策略的承载能力异常出色:策略避开了本月稍后流动性变差的资产,尽管它在入场时不可能知道这一点。
应在选择时点之前设定统计截止时间。对于在当月首个交易时段进行的再平衡,你可以根据之前 20 个已完成交易时段的数据排名,截止到前一个交易时段。还要明确执行延迟:如果排名使用昨天的收盘价,按你假设的工作流程,订单能否在今天开盘时提交?
| 筛选规则 | 时点版本 | 常见泄漏 |
|---|---|---|
| 按美元成交额排名前 20 | 仅使用再平衡前结束的交易时段进行排名 | 纳入再平衡当日或当月的数据 |
| 在交易所上市 | 使用实际生效的上市和退市时间 | 用当前的交易品种接口查询过去日期 |
| 最低历史数据长度 | 只统计选择时点前可用的观测值 | 要求资产在未来继续存续才能通过筛选 |
错误三:把历史数据缺失视为资产不具备入选资格的证据
数据供应商的档案不一定完整记录了历史市场情况。某个交易品种缺失,可能意味着该资产从未存在、交易所更改了命名规则、供应商没有保留已退市的品种,或者数据流只是出现了缺口。这些情况的影响各不相同。
问题表现为资产池看似整齐,却存在无法解释的缺口。研究人员经常要求完整的回看窗口,然后默默排除任何历史不足的资产。作为预热规则,这可能合理,但也会有意排除新上市的资产。更糟的是,如果失败市场的数据缺失更集中,“只用完整数据”就成了另一种幸存者筛选。
应将入选资格、数据可用性和策略预热作为彼此独立的事实记录。逐日记录资产被排除的原因。在研究台账中保留缺失情况,不要悄悄将其转化为删除。如果来源数据无法确认某个市场当时是否已上市或可交易,就应明确说明,并衡量结果在多大程度上取决于这种不确定性。
让资产池可复现
一次有用的审计可以从某个历史再平衡时点开始。根据带日期的上市记录和该截止时点可用的数据,重建候选名单。只用已完成的观测值重新计算排名输入。然后,将所得成员名单与回测实际使用的名单进行比较。
应将规则、截止时间、成员资格决策和数据源版本与回测结果一并保存。如果你无法解释某个特定日期为何纳入一项资产、排除另一项资产,就还无法判断策略究竟是发现了优势,还是继承了一份带有未来信息的样本。
资产池错误很少表现为不可能出现的价格。它们会让策略看起来恰好避开了那些后来不再方便交易的市场。
← 全部文章


