3. 关联键基础概念

在逐笔(tick-by-tick)行情数据中,委托与成交是两条独立推送的流:一边是逐笔委托(Order),一边是逐笔成交(Trade)。要把“某笔成交是由哪一笔委托产生的”这件事说清楚,就必须依赖一个能把两边记录对应起来的标识——这就是逐笔委托成交关联键。它不是行情数据里的一个普通字段,而是订单簿重建、委托生命周期追踪、成交归因分析的基础设施。

一、关联键到底在关联什么

逐笔委托记录描述的是“某账户在某个时刻提交了一笔买单或卖单”,包含委托编号、方向、价格、数量、委托类型等;逐笔成交记录描述的是“买方与卖方在某个时刻以某个价格撮合了某个数量”,包含成交编号、成交价格、成交数量、买卖双方委托编号等。关联键的作用,就是把成交记录中的“买方委托编号/卖方委托编号”与委托记录中的“委托编号”对齐,从而还原出:

  • 这笔成交消耗的是哪一笔(或哪几笔)委托的剩余量;
  • 该委托在成交后剩余多少、是否已全部成交或部分成交;
  • 该委托是否被撤单、撤单发生在成交之前还是之后;
  • 同一委托在不同时间点上的状态迁移序列。

因此,关联键的本质是委托与成交之间多对多关系的连接锚点:一笔委托可以对应多笔成交(部分成交),一笔成交也可能同时对应买方委托与卖方委托两个键。理解这一点,是后续所有重建逻辑的前提。

二、交易所官方键与衍生键的区别

不同交易所对逐笔数据的字段设计并不一致,关联键因此分为两类。

官方键是交易所行情接口中直接给出的、具有明确语义的标识。典型如:上交所逐笔委托中的“委托编号”(order no),逐笔成交中的“买方委托编号”“卖方委托编号”;深交所逐笔委托中的“委托序号”,逐笔成交中的“买方委托序号”“卖方委托序号”。官方键由交易所生成,在同一交易日内通常唯一,是关联的首选依据。

衍生键则是在官方键缺失、不完整或跨市场不统一时,由数据使用方自行构造的键。常见做法包括:以“证券代码 + 委托编号”组合成复合键,避免不同标的间编号重复;以“通道号 + 委托编号”区分不同申报通道;在官方键完全缺失时,用“时间戳 + 价格 + 数量 + 方向”构造近似匹配键。衍生键的可靠性低于官方键,尤其在时间戳精度不足、同价同量并发委托较多时,容易出现错配。

实践原则:优先使用官方键;只有在官方键不可得或跨源对齐时才引入衍生键,并明确记录衍生键的构造规则与置信度,避免把近似匹配当成精确关联。

三、唯一性与一致性要求

关联键要真正可用,必须满足两个硬性条件。

唯一性:在同一作用域内,一个键只能指向一条委托记录。作用域通常定义为“同一交易日 + 同一证券代码 + 同一交易方向”。若交易所的委托编号在当日全市场唯一,则作用域可放宽;若仅在单通道内唯一,则必须把通道号纳入键。唯一性被破坏时,重建会出现“一笔成交挂到多条委托上”的歧义。

一致性:成交记录中引用的委托键,必须能在委托流中找到对应记录,且方向、价格、数量逻辑自洽。例如买方委托编号对应的委托方向应为买,成交数量不应超过该委托的原始数量。一致性检查是数据质量校验的核心环节,常见异常包括:成交引用了不存在的委托键、买卖方向与委托方向矛盾、累计成交数量超过委托数量。

下面这张图展示了官方键与衍生键在关联链路中的位置,以及唯一性、一致性检查的落点:

逐笔委托—成交关联键结构示意 逐笔委托流 委托编号(官方键) 证券代码 / 方向 价格 / 数量 / 类型 作用域:交易日+代码+方向 逐笔成交流 成交编号 买方委托编号 卖方委托编号 成交价格 / 数量 关联键 官方键:委托编号 衍生键:代码+编号 唯一性校验:键在作用域内不重复 一致性校验:成交引用的键可回溯、方向与数量自洽 订单簿重建 / 委托生命周期 剩余量、成交归因、撤单判定

四、关联键在订单簿重建中的角色

订单簿重建的目标,是维护每个价位上的挂单量,并随逐笔事件实时更新。关联键在其中承担“状态机驱动”的角色:

  1. 建单:收到逐笔委托,以委托编号为键在委托表中登记一条记录,状态置为“挂单中”,同时把数量挂到对应价位。
  2. 成交扣减:收到逐笔成交,用买方/卖方委托编号回查委托表,扣减对应委托的剩余量,并同步扣减该价位的挂单量。若剩余量归零,状态置为“全部成交”。
  3. 撤单处理:收到撤单消息,用委托编号回查,将剩余量从价位上移除,状态置为“已撤单”。
  4. 异常兜底:若成交引用的键在委托表中不存在,说明委托流缺失或键不一致,应记录异常并触发补数或降级处理,而不是静默丢弃。

举个教学示例(示例参数,非实测):某证券在 09:30:00.120 收到一笔买单,委托编号 10023,价格 10.50,数量 800。随后 09:30:00.350 收到一笔成交,买方委托编号 10023,成交价 10.50,数量 300。用键 10023 回查,委托剩余量由 800 变为 500,10.50 价位挂单量同步减 300。若之后又收到一笔成交引用 10023、数量 600,则累计成交 900 超过原始 800,一致性校验应报错,提示数据异常而非继续扣减。