历史数据中的常见错误
什么是历史数据(以及为何常被误解)
历史数据是用于描述价格或收益率随时间变化行为的过去观测记录。在实践中,“相同”的历史数据可能意味着不同的事物:原始逐笔成交、聚合后的K线(例如每分钟K线)、经过调整的序列(例如其他市场中的公司行为调整)或服务商已进行过处理的特定数据集。一个常见错误是将历史数据视为“实际发生情况”的直接、客观反映,而忽略了它实际上是按照特定构建规则处理后的输入数据。
历史数据工作流程中的错误来源
1) 使用不一致的数据集定义
一个常见错误是混合使用不同规则构建的数据集——例如不同的采样频率、不同的时区,或对缺失数据采用不同处理方法。如果你在未确认基础时间网格和数据清洗是否一致的情况下比较不同研究的结果,可能会将差异归因于策略表现,而非数据集构建方式的差异。
2) 计算中的隐含假设
任何计算收益率、回撤或绩效指标的示例都依赖于若干假设:K线如何形成、买卖时间点如何映射到实际价格、是否建模点差、佣金或滑点。一个中立的检查方法是,在解释结果前明确列出所有假设。如果他人无法根据这些假设复现计算,那么结论就无法验证。
3) 前瞻偏差与数据泄露
另一种严重问题是在决策时使用了当时不可用的信息。这可能发生在使用未来数据点计算特征、在划分训练与测试期前对整个数据集进行预处理,或转换过程中无意包含未来数据时。即使不涉及任何交易建议,验证步骤也必须确保所有转换仅使用预测或决策时间点之前可用的数据。
4) 过度拟合历史噪声
历史数据包含随机性和市场微观结构效应。一个模型或规则可能看似成功,只是因为它恰好匹配了历史中的偶然特征,而非稳定关系。其后果是泛化能力差:当市场条件变化(流动性、波动率状态、执行摩擦)时,结果可能不再成立。一个中立的检查方法是严格划分时间段,并避免反复“调参”直到历史结果看起来良好。
可应用的证据、示例与中立检查
考虑从K线数据计算简单收益率的场景。你必须明确:K线时间戳代表什么含义、你将K线内的哪个价格视为可交易价格(开盘、收盘、最高、最低)、是否包含交易成本。如果你使用不同的K线对齐方式或不包含成本重新计算,绩效指标可能会显著变化。
为验证可靠性,可采用以下三项检查:
- 可复现性检查:你能否根据文档化的规则精确复现数据集转换和指标计算?
- 时间分割检查:当你切换到另一个非重叠时间段时,结果是否仍大致相似?
- 假设压力测试:结论是否依赖于某个脆弱的选择(例如特定对齐方式、缺失数据处理规则或成本模型)?
限制与风险:历史数据无法证明什么
历史关系不能确立未来结果。即使某个结果在数学上与历史数据一致,它仍可能在新的市场环境、不同的执行方式或变化的数据处理规则下失败。其他限制还包括观测数据缺失或稀疏、某些情境下的幸存者效应,以及从表面图表难以察觉的服务商特定差异。
一个清晰且易于解释的要点是:历史数据对于度量和学习是有用的,但前提是其构建规则、假设和局限性必须明确说明,并且能够独立验证。