4. 口径不一致的根源:交易所差异、数据源差异、时间戳对齐问题、撮合规则差异
高频行情标签的“口径不一致”是量化策略回测与实盘偏差(滑点超预期、信号延迟误判)的首要诱因。本章从四个核心维度拆解不一致的根源,帮助你在数据治理阶段精准定位偏差来源。
核心原则: 口径校准不是“统一格式”,而是“对齐业务语义”。同一笔成交在不同交易所、不同数据源、不同时间戳体系下,可能被贴上完全不同的标签。
4.1 交易所差异
不同交易所的撮合引擎、订单簿结构、行情发布策略存在本质差异,直接导致相同市场事件被编码为不同标签。
| 差异维度 | 上交所(SSE) | 深交所(SZSE) | 影响标签字段 |
|---|---|---|---|
| 行情快照频率 | 约 3 秒/次(指数) | 约 1 秒/次(指数) | last_px_ts, bid_ts |
| 逐笔成交发布 | 仅部分券商提供 | 全量逐笔推送 | trade_type, aggressor_flag |
| 涨跌停价处理 | 涨停时卖一为空 | 涨停时卖一为涨停价 | bid_price, ask_price |
| 盘后固定价格 | 无 | 15:05 固定价成交 | trade_phase, special_trade_flag |
实战校准建议: 在标签口径文档中,为每个交易所单独维护“行情发布特性表”。例如,处理 SSE 行情时,需对“卖一为空”场景做特殊填充逻辑,否则回测中会错误计算买卖价差。
4.2 数据源差异
同一交易所的原始行情,经过不同数据供应商(如 Wind、Bloomberg、Level-2 直接接入、第三方聚合商)的清洗、重组、缓存后,标签口径可能发生偏移。
- 时间戳精度损失: 部分数据源将微秒级时间戳截断为毫秒级,导致同一笔成交在不同源中时间戳不同。
- 成交方向推断差异: 基于逐笔成交的主动买/卖标志,不同数据源使用不同算法(Tick 规则 vs. 报价中间价规则),导致 aggressor_flag 不一致。
- 缺失值填充策略: 对于盘口无报价时的 bid/ask 价格,有的源填充为 0,有的填充为上一笔价格,有的填充为 NaN。
| 数据源特性 | 源 A(交易所直连) | 源 B(第三方聚合) | 口径偏差风险 |
|---|---|---|---|
| 时间戳精度 | 微秒 (µs) | 毫秒 (ms) | 高频信号对齐错位 |
| 成交方向算法 | 交易所原始标志 | 报价中间价推断 | 主动买/卖标签反转 |
| 盘口空值处理 | 保留 NaN | 填充为 0 | 价差计算异常 |
4.3 时间戳对齐问题
时间戳是高频标签校准中最隐蔽、破坏性最强的偏差来源。不同环节的时间戳含义不同,必须严格区分。
时间戳对齐硬规则: 在标签口径文档中,必须明确声明“标签时间戳 = 交易所原始撮合时间(T_exchange)”。如果数据源只提供 T_nic 或 T_db,需建立“时间戳偏移映射表”,并在回测引擎中做延迟补偿。
4.4 撮合规则差异
不同交易品种(股票、期货、期权)以及不同交易时段(连续竞价、集合竞价、盘后固定价格)的撮合规则不同,直接影响成交标签的生成逻辑。
- 价格优先、时间优先: 这是主流规则,但期货市场可能存在“大单优先”或“市价单优先”的特殊场景。
- 集合竞价撮合: 统一价格撮合,所有成交价格相同,此时 trade_type 标签应标记为“集合竞价”,而非“连续竞价”。
- 冰山订单处理: 部分交易所对冰山订单的披露规则不同,导致盘口挂单量标签与实际可成交量不一致。
- FOK/IOC 订单: 立即成交否则撤销(IOC)与全部成交否则撤销(FOK)订单的剩余部分不会进入订单簿,标签中需特殊标记。
| 撮合场景 | 规则描述 | 标签口径影响 |
|---|---|---|
| 连续竞价 | 价格优先 → 时间优先 | trade_type = 'continuous' |
| 集合竞价 | 单一价格撮合 | trade_type = 'auction',且 price 为统一价 |
| 冰山订单 | 仅显示部分挂单量 | bid_size / ask_size 可能小于实际总量 |
| IOC 订单 | 未成交部分立即撤销 | 需标记 order_type = 'IOC',剩余量不进入盘口 |
校准检查清单: 在接入新市场或新品种时,务必向交易所或数据供应商索取《撮合规则说明书》,并对照检查以下标签字段:trade_type、order_type、aggressor_flag、bid_size、ask_size。任何规则差异都应在口径文档中显式记录。
4.5 根源总结:口径不一致的传导链
上述四个根源并非独立作用,而是形成一条“偏差传导链”: