4. 深交所逐笔委托核心字段解析
深交所逐笔委托(Order)消息是Level-2行情中最基础、信息密度最高的数据之一。它记录的是每一笔进入撮合系统的委托指令本身,而不是成交结果。理解这条消息,关键不在于记住字段名称,而在于搞清楚每个字段的编码方式、取值范围和业务含义,因为后续的字段映射、订单簿重建、委托生命周期跟踪,全部建立在对这些字段的正确解读之上。
本节以深交所Binary格式逐笔委托消息为对象,逐项拆解核心字段,并完成一条真实结构消息的字段提取演练。
一、消息整体结构与字段布局
深交所逐笔委托消息采用定长二进制结构,标准长度为28字节(不含消息头)。各字段按固定偏移排列,解析时必须严格按偏移量读取,不能依赖分隔符。核心字段包括:通道号、消息类型、委托序号、委托价格、委托数量、买卖方向、订单类型等。其中委托序号、价格、数量、方向、订单类型是本节重点。
需要特别说明的是价格与数量的精度约定:深交所逐笔委托中的委托价格字段以“分”为单位存储为整数,实际价格 = 字段值 ÷ 10000(即保留4位小数,单位为元);委托数量字段以“股”为单位存储为整数,直接读取即可,无需换算。这一约定在字段映射时极易出错,必须先在解析层统一处理。
二、核心字段逐项拆解
委托序号(ApplSeqNum):8字节无符号整数,是当日该通道内委托消息的单调递增序号。它不等同于交易所的原始订单号,而是行情快照中的消息序号,用于排序和去重。取值范围为1到当日最大委托笔数,跨日后重新计数。映射时通常对应到标准模型的 order_seq 字段,作为订单簿插入顺序的依据。
委托价格(Price):8字节整数,单位为“分”的万分之一,即字段值 123400 表示 12.34 元。市价委托时该字段可能填 0 或特定标记值,需结合订单类型判断,不能直接当作有效价格使用。
委托数量(OrderQty):8字节整数,单位为股。深市A股最小委托单位为100股,但逐笔委托中可能出现零股(如卖出零股余额),因此不能假设一定是100的整数倍。
买卖方向(Side):1字节枚举。深交所约定:'1' 表示买入,'2' 表示卖出。注意这是字符编码而非数值1/2,解析时需按ASCII码判断,映射到标准模型时通常转为 Buy/Sell 枚举。
订单类型(OrdType):1字节枚举,是本节最容易被低估的字段。深交所逐笔委托中常见取值:'1' 表示市价,'2' 表示限价,'U' 表示本方最优。订单类型直接决定价格字段是否有效、撮合逻辑如何解释,是字段映射中必须优先判断的分支条件。
此外还有通道号(ChannelNo)用于区分不同撮合通道,消息类型(MsgType)标识消息种类,二者在映射时作为路由和过滤依据。
三、单条消息字段提取演练
下面给出一条示例消息的十六进制字节流(示例数据,用于教学演示,非实测行情):
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
为便于讲解,我们按字段偏移构造一条可读的示例记录:通道号=1,委托序号=100023,委托价格字段=123400,委托数量=500,买卖方向='1',订单类型='2'。提取过程如下:
- 按偏移读取委托序号,得到 100023,作为该笔委托在当日通道内的排序键。
- 读取价格字段 123400,除以10000,得到 12.34 元。
- 读取数量字段 500,单位为股,即500股。
- 读取方向字节,ASCII为
'1',判定为买入。 - 读取订单类型字节,ASCII为
'2',判定为限价委托,价格字段有效。
提取结果可整理为一条标准化的中间记录:{seq:100023, price:12.34, qty:500, side:"Buy", ordType:"Limit"}。这条记录即可进入后续的订单簿插入或字段映射流程。
'2')或本方最优('U')时,价格字段才具有可比意义;市价委托('1')的价格字段应标记为无效,避免污染订单簿价格档位。四、字段映射中的常见陷阱
第一,方向与类型的字符编码。很多开发者习惯用数值1/2判断方向,但深交所返回的是ASCII字符,直接比较数值会全部判错。第二,价格精度。忘记除以10000会导致价格放大一万倍,订单簿档位完全错乱。第三,委托序号跨通道不唯一。不同通道的序号各自递增,映射时必须用“通道号+委托序号”作为联合主键,否则会出现序号冲突。第四,订单类型缺失。部分历史数据或简化接口可能不带订单类型,此时需按默认限价处理并在映射层标注假设来源。
下图展示了单条逐笔委托消息从原始字节到标准化字段的提取路径,以及各字段的编码规则与映射去向,可作为字段提取时的对照参考。
完成字段提取后,建议立即做一次自检:价格是否落在合理区间(如0.01~10000元)、数量是否为正整数、方向与类型是否在枚举集合内、联合主键是否唯一。这四项检查能拦截绝大多数映射错误,是逐笔委托数据入库前的必要关口。