3. 行情数据链路
在逐笔一致性校验中,很多“对不上”的问题并非数据本身错误,而是数据在链路上经历了不同路径、不同排队和不同时间戳口径。要判断一笔逐笔成交为何在客户端看到的顺序、时间或数量与交易所原始记录存在差异,必须先建立完整的链路视角:数据从交易所撮合系统产生,经过行情网关、券商柜台、客户端接入层,最终到达策略或终端。每一跳都可能引入延迟、乱序、丢包或字段改写。
核心原理:逐笔数据的三段式生命周期
逐笔行情本质上是一条带序号的事件流。交易所撮合引擎在成交或委托变更时生成增量消息,消息带有交易所内部序号、时间戳和业务字段。这条消息离开交易所后,进入行情分发网络,再经过券商侧的解码、过滤、合并、转发,最终由客户端订阅并还原成逐笔序列。一致性校验的核心,就是确认客户端还原出的序列与交易所原始序列在“同一逻辑序号”上是否一致。
从时间维度看,一笔逐笔数据会经历四个关键时间点:交易所撮合时间(Exchange Timestamp)、行情网关发出时间(Gateway Send Time)、券商柜台接收时间(Broker Receive Time)、客户端接收时间(Client Receive Time)。这四个时间点之间的差值,分别对应网络传输延迟、柜台处理延迟和客户端接入延迟。校验时若只比较客户端时间与交易所时间,往往会把所有延迟混在一起,无法定位问题环节。
方法流程:逐跳拆解与延迟归因
实际排查时,建议按“先分段、再对齐、后归因”的流程推进。第一步,在交易所原始逐笔文件或行情网关日志中提取基准序列,记录序号、时间戳和关键字段。第二步,在券商柜台侧抓取接收日志,确认柜台收到的序号范围与交易所发出范围是否连续。第三步,在客户端侧记录订阅到的逐笔序列,并与柜台转发序列比对。第四步,对差异点做时间差统计,判断是网络抖动、柜台处理慢,还是客户端消费慢。
下面是一段典型的柜台侧逐笔接收日志片段,可用于观察序号跳变和延迟分布:
2025-03-18 09:30:00.123456 RECV seq=1000231 ts_ex=09:30:00.120001 ts_gw=09:30:00.121500
2025-03-18 09:30:00.124102 RECV seq=1000232 ts_ex=09:30:00.120500 ts_gw=09:30:00.122000
2025-03-18 09:30:00.125887 RECV seq=1000234 ts_ex=09:30:00.121000 ts_gw=09:30:00.122800
2025-03-18 09:30:00.126001 RECV seq=1000233 ts_ex=09:30:00.120800 ts_gw=09:30:00.122600
2025-03-18 09:30:00.130455 RECV seq=1000235 ts_ex=09:30:00.121200 ts_gw=09:30:00.123000
从日志可见,seq=1000234 先于 seq=1000233 到达柜台,说明柜台侧存在乱序。此时若客户端直接按到达顺序消费,就会与交易所原始顺序不一致。校验工具需要支持按交易所序号重排,而不是简单按接收时间排序。
案例/场景:多路行情合并导致的“假不一致”
某券商同时接入交易所主用和备用行情源,柜台层做双路合并。当主用源短暂抖动时,备用源的数据可能先到,导致同一序号在柜台侧出现两次或顺序颠倒。客户端如果只按接收顺序追加,就会看到“重复逐笔”或“序号回退”。这类问题并非数据错误,而是合并策略与校验口径不匹配。
处理方式是在柜台侧增加合并窗口,例如等待 50ms 再向下游转发,确保同一序号的多路副本完成去重和排序。同时在校验工具中记录每笔数据的来源通道,便于区分“主用源延迟”与“备用源补发”。
误区/复盘:把“时间戳不一致”等同于“数据错误”
常见误区之一是直接比较交易所时间戳与客户端本地时间,发现相差几十毫秒就判定数据异常。实际上,交易所时间戳通常来自撮合引擎内部时钟,而客户端时间来自本地操作系统,两者之间可能存在时钟漂移。正确做法是使用同一台机器上的相对时间差,或通过 NTP 同步后再比较。
另一个误区是忽略字段级差异。逐笔数据在不同链路可能经历字段裁剪或精度转换,例如交易所原始价格精度为 0.001,柜台转发时保留 0.01,客户端再还原时出现舍入差异。这类问题不会影响序号连续性,但会影响价格一致性校验。复盘时应建立字段映射表,明确每个字段在链路各节点的精度和单位。
| 链路节点 | 关键动作 | 常见延迟来源 | 校验关注点 |
|---|---|---|---|
| 交易所撮合 | 生成逐笔序号与时间戳 | 撮合引擎内部排队 | 序号起始值、时间戳精度 |
| 行情网关 | 协议封装、组播发送 | 网关排队、网络复制 | 发送时间戳、通道标识 |
| 券商柜台 | 解码、过滤、多路合并 | 解码耗时、合并窗口、风控过滤 | 接收序号连续性、去重结果 |
| 客户端接入 | 订阅、缓存、序列还原 | 订阅队列积压、线程调度 | 最终序列顺序、字段完整性 |
综上,逐笔一致性校验不是单点比对,而是沿链路逐跳建立基准、逐段归因。只有把交易所、网关、柜台、客户端四个环节的时间戳、序号和字段口径全部对齐,才能准确判断差异是延迟、乱序、过滤还是精度转换造成的。