沪市逐笔委托引用缺失的交易所确认 (SSE Missing Order Reference)

Definition. 供应商样例包实测发现「沪市成交引用的委托号有 85.8% 不在委托流中, 且缺失严格单侧」之后, 上交所自己的实时行情接口规范 IS122 v0.61 (2025-11-17) 明确写了 一句话: 逐笔成交扩展字段里的买卖订单编号 「无对应委托时填空」。 也就是说缺一侧委托号是交易所设计允许的正常情况, 不是数据商的采集缺陷。

原文依据

《IS120/IS122 上海证券交易所行情网关 STEP 数据接口规范》第 2.5.4.2 节「逐笔成交行情扩展字段」:

Tag 域名 必须 说明 类型
10116 BidApplSeqNum Y 买方订单编号 (QuoteID), 无对应委托时填空 C18
10117 OfferApplSeqNum Y 卖方订单编号 (QuoteID), 无对应委托时填空 C18

版本 0.61 的修订记录原文:

1、2.5.4.2 逐笔成交行情扩展字段中无对应买卖订单编号时调整为填空。

「调整为填空」意味着在 0.61 之前有别的表示方式 (可能是 0 或全 0 数字), 0.61 (2025-11-17) 起改成了空字符串。这是一个数据清洗上的硬分界: 跨 2025-11-17 的沪市逐笔数据, 解析器必须同时处理「空字符串」和「数字 0」两种无委托表示。

这解释了实测数据的形态

供应商样例包实测 (600519 @ 20150105): 委托 33,384 行, 成交 27,209 行, 成交引用的委托号 85.8% 不在委托流中, 缺失严格单侧——要么缺买方要么缺卖方, 没有双侧都缺、没有零号。

对照 IS122 的字段定义, 这个形态有了官方解释:

观察 官方定义对照
缺失严格单侧 两个字段各自独立, 各自「无对应委托时填空」
没有双侧都缺 至少一侧委托在行情网关的可见范围内
没有零号 委托号是 QuoteID 字符串 (C18) 而非数字序号, 不存在「0 号」这个值

最可能的机制: 沪市逐笔委托流只披露在交易所撮合系统里有完整生命周期追踪的申报, 而成交的被动方是挂单 (有队列记录)、主动方是即时申报 (走的是另一条通道)。 供应商 README 说这与 Wind 源沪市 ghost 订单同机制, 缺的都是主动方申报行 —— 现在有官方字段定义佐证这不是数据商采集丢失, 而是行情披露的设计。

为什么只能靠比较两侧时间判定主动方

IS122 的逐笔委托扩展字段 (2.5.4.1) 有 Side (1=买 / 2=卖), 没有主动/被动标志。 逐笔成交扩展字段 (2.5.4.2) 有 TradeMethod (成交方式, 10 个枚举值, 见下), 但那是债券的 成交方式 (匹配成交/点击成交/询价成交/竞买成交等), 不是股息的主动方标志。

股息的主动方只能靠: 成交的 BidApplSeqNum 与 OfferApplSeqNum 各自去委托流查时间, 先出现的那一侧就是主动方; 而当一侧填空时, 另一侧就是被动方 (maker), 填空的委托号缺失不代表那一侧不存在, 只代表它没被披露。

IS122 的 TradeMethod 枚举 (债券成交方式, 10 值)

值 含义
0 匹配成交 (预留)
1 确定报价点击成交
2 待定报价点击成交
3 询价成交
6 协商成交 (含合并申报)
7 竞买单一主体成交
10 竞买多主体单一价格成交
11 竞买多主体多重价格成交

另有 MarginPrice (边际价格, 仅竞买多主体成交)、TotalValueTraded N17(2) (成交金额, 2 位小数 —— 注意与历史数据接口书的 3 位不同, 这是实时行情接口的口径)。

实操含义

  1. 跨 2025-11-17 的沪市逐笔数据, 「无委托」有 0 与空串两种表示, 必须同时处理。
  2. 沪市委托流不可用于按委托流重放订单簿 —— 这条现在有交易所字段定义背书, 不再只是 数据商样本的观测。被动方 (挂单) 有队列记录, 主动方 (即时申报) 不在委托流里, 用委托流重放只能还原残缺的一侧。
  3. 方向判定仍只能靠成交的双腿委托号, 但要接受「一侧常为空」是常态, 并把主动方覆盖率 作为数据质量指标报告, 不要默认接近 100%。
  4. 深市对应机制不同: 深市 hq_trade 用 BidApplSeqNum/OfferApplSeqNum, 0 表示无对应委托 (数字 0, 不是空串) —— 两所的无委托表示不一样, 跨所代码要分别映射。

与本 wiki 其他概念的连接

引用