回测系统基础:回测的基本流程、标签口径的概念、常见口径偏差来源
回测(Backtesting)是量化策略研发的核心验证环节。它利用历史数据模拟策略运行,评估策略在过去的收益、风险与稳定性。然而,回测结果的可信度高度依赖于标签口径(Label Caliber)的准确性。口径偏差会导致回测结果与实盘表现严重背离,本章将系统梳理回测基本流程、标签口径的定义以及三大常见偏差来源。
2.1 回测的基本流程
一个标准的回测流程通常包含以下五个步骤,每一步都可能引入口径偏差:
- 数据准备:获取历史行情、财务数据、事件数据,并进行清洗、对齐、复权处理。
- 策略信号生成:基于规则或模型,在历史时间点上生成买入/卖出/持仓信号。
- 模拟交易执行:模拟订单簿、滑点、手续费、冲击成本,生成成交记录。
- 绩效计算:计算收益率、夏普比率、最大回撤、胜率等指标。
- 标签校准与归因:对每一笔交易或持仓期打上“正确/错误”、“盈利/亏损”等标签,并分析偏差来源。
关键点:步骤 5 是回测质量控制的最后防线。如果标签口径存在系统偏差,前四步再精确也无法得到可信的结论。
2.2 标签口径的概念
标签口径(Label Caliber)是指回测系统中对每一笔交易、持仓或信号赋予的“正确/错误”、“盈利/亏损”、“有效/无效”等分类标准。口径决定了回测绩效的统计基础,常见的标签口径包括:
| 口径类型 | 定义 | 典型应用场景 |
|---|---|---|
| 交易级标签 | 以单笔开平仓为单元,标记该笔交易的盈亏、胜率 | 策略参数优化、交易员绩效评估 |
| 持仓期标签 | 以持仓时间段为单元,标记该时段内的累计收益 | 趋势跟踪策略、多空组合分析 |
| 信号级标签 | 以信号发出时刻为基准,标记信号发出后 N 个周期的涨跌 | 机器学习特征工程、信号有效性检验 |
| 事件级标签 | 以特定事件(财报、分红、宏观数据)为锚点,标记事件前后的价格行为 | 事件驱动策略、因子归因 |
实践建议:在 Kafka 驱动的回测流水线中,标签口径通常以 Avro 或 Protobuf schema 定义,并作为消息的元数据字段传递。口径变更时,只需更新 schema 版本,无需修改下游消费逻辑。
2.3 常见口径偏差来源
口径偏差是回测结果失真的主要根源。以下三种偏差在量化回测中最为常见,且往往相互叠加:
2.3.1 幸存者偏差(Survivorship Bias)
回测数据只包含当前仍在交易的标的,剔除了已退市、破产、被收购的标的。这会导致回测收益被高估,因为被剔除的标的通常表现较差。
- 典型表现:回测中从未出现“踩雷”案例,实盘却频繁遭遇退市或暴跌。
- 校准方法:使用全量历史成分股数据,包含已退市标的;或使用“点时间”快照数据重建历史成分股列表。
2.3.2 前瞻偏差(Look-Ahead Bias)
在回测中使用了未来数据(如未来财报、未来复权因子、未来价格信息)来生成当前信号。这是最隐蔽的偏差之一。
- 典型表现:回测夏普比率极高,实盘却大幅回撤。
- 常见来源:使用未来复权价格计算收益率、使用未来财报数据填充缺失值、使用未来事件进行信号过滤。
- 校准方法:严格按时间顺序处理数据,确保每个时间点只能使用该时间点之前的信息;使用“延迟对齐”技术,在 Kafka 流中通过时间戳 watermark 机制强制数据延迟。
2.3.3 其他常见偏差
| 偏差类型 | 描述 | 影响 |
|---|---|---|
| 选择偏差 | 回测时间段、标的范围、参数选择具有主观倾向 | 过度拟合特定市场环境 |
| 生存时间偏差 | 只回测策略存活下来的时间段,忽略策略失效期 | 高估策略稳定性 |
| 数据对齐偏差 | 不同数据源的时间戳精度不一致,导致信号与价格错位 | 产生虚假交易信号 |
注意:在 Kafka 驱动的回测系统中,前瞻偏差尤其容易通过“数据乱序”或“延迟到达”的方式悄悄混入。必须使用 Kafka Streams 的
TimestampExtractor 和 Watermark 机制,确保每个处理窗口只包含时间戳严格小于窗口结束时间的数据。
2.4 口径校准在回测系统中的定位
口径校准不是回测的“事后补救”,而是贯穿整个回测流程的质量控制环节。在 Kafka 驱动的架构中,口径校准通常以独立的“校准流”存在,消费原始交易流和标签流,输出校准后的标签流供下游绩效计算使用。校准流的核心逻辑包括:
- 时间戳对齐:确保信号时间、成交时间、标签时间使用统一的时间基准(如交易所撮合时间)。
- 数据完整性校验:检查是否存在缺失的行情片段、退市标的、复权断层。
- 偏差检测与标记:对每笔交易或信号自动标记“可能受幸存者偏差影响”、“可能受前瞻偏差影响”等元信息。
- 口径版本管理:支持多版本口径并存,便于对比不同口径下的回测结果差异。
通过将口径校准嵌入 Kafka 流处理管道,可以实现实时、可追溯、可重放的校准能力,这是传统批处理回测系统难以做到的。