2. 逐笔成交字段体系总览
逐笔成交数据是行情数据中最细粒度的一类,它记录的是每一笔撮合成交的瞬时快照。要把这类数据整理成可复用的代码字典,第一步不是急着写映射表,而是先建立字段体系的整体认知:哪些字段是交易所直接下发的原始字段,哪些是行情网关或本地系统加工出来的衍生字段,它们各自用什么命名、什么数据类型、精度如何,以及字段之间靠什么逻辑串起来。只有把这一层看清,后续的字典条目才不会互相矛盾。
一、原始字段与衍生字段的分界
原始字段指交易所逐笔成交接口直接推送、未经二次计算的字段,典型如成交序号、成交时间、证券代码、成交价格、成交数量、买卖方向标识、成交类型等。它们的共同特征是“可溯源”:任何一个值都能在交易所原始报文里找到对应位置,字段语义由交易所接口规范定义,本地系统只做解码和类型转换,不做业务加工。
衍生字段则是本地系统在原始字段基础上计算或推导出来的,例如成交金额(价格×数量)、成交笔序号在当日的累计偏移、按方向聚合的主动买/主动卖量、成交间隔时间、价格相对前一笔的变动方向等。衍生字段必须显式标注其计算口径和依赖的原始字段,否则字典使用者无法复现。实践中建议在字典里用“来源类型”一列区分原始/衍生,衍生字段再补一列“计算表达式”,这是避免口径争议最有效的手段。
二、字段命名规范
逐笔成交字段命名要解决三个问题:可读、可映射、可扩展。推荐采用“业务域_对象_属性_单位/口径”的分段式命名,全部小写,段间用下划线连接。例如 trade_seq_num 表示成交序号,trade_price 表示成交价格,trade_volume 表示成交数量,trade_bs_flag 表示买卖方向标识。衍生字段在对象段体现加工含义,如 trade_amount(成交金额)、trade_interval_ms(与上一笔的间隔毫秒数)。
命名还要与交易所原始字段名建立稳定映射。原始报文里常见 TradeIndex、TradePrice、TradeVolume、BSFlag 这类驼峰或缩写形式,字典中应保留“原始字段名”一列,形成“标准名 ↔ 原始名”的双向对照。这样上游接口升级、字段改名时,只需改映射层,不影响下游使用标准名的代码。
三、数据类型与精度要求
逐笔成交对精度极其敏感,类型选错会直接导致对账差异。价格类字段必须用定点小数或整数最小单位表示,禁止用二进制浮点直接参与金额计算。常见做法是价格以“分”或交易所规定的最小价格变动单位(tick)为整数存储,展示时再除以精度因子。数量类字段用整数,注意交易所可能以“股”或“手”为单位,字典中必须写明单位。时间字段建议同时保留交易所原始时间串和归一化后的毫秒时间戳,前者用于溯源,后者用于排序和间隔计算。方向、类型这类枚举字段用定长编码(如字符或小整数),并在字典中给出完整取值表。
标准名 原始名 类型 单位/精度 来源
trade_seq_num TradeIndex uint64 — 原始
trade_time_raw TradeTime string HHMMSSsss 原始
trade_time_ms — int64 毫秒时间戳 衍生
trade_price TradePrice int64 最小价格单位 原始
trade_volume TradeVolume int64 股 原始
trade_amount — int64 最小货币单位 衍生
trade_bs_flag BSFlag char B/S/N 原始
trade_interval_ms — int32 毫秒 衍生
四、字段间的逻辑关系
逐笔成交字段不是孤立的,它们之间存在明确的约束与推导关系,这正是字典需要表达的核心。第一是唯一性关系:同一交易日内,成交序号单调递增且唯一,可作为主键;证券代码+成交序号构成全局唯一标识。第二是计算关系:成交金额由价格与数量按精度因子换算得到,方向聚合量由方向标识分组累加得到。第三是时序关系:成交时间与成交序号应同向递增,若出现序号增大而时间回退,说明存在乱序或跨频道拼接问题,需要在字典的“校验规则”中标注。第四是枚举约束:方向标识只能取约定集合内的值,成交类型需与交易所定义一致。
把这些关系画成一张字段关系图,比逐条文字描述更容易在团队内对齐口径。下图以一笔逐笔成交记录为中心,展示原始字段、衍生字段及其依赖方向。
五、落地时的整理要点
在实际整理字典时,建议以“一条逐笔成交记录”为行、以字段为列建立主表,每列至少包含:标准名、原始名、来源类型(原始/衍生)、数据类型、单位与精度、取值范围或枚举、计算表达式(衍生必填)、校验规则。对于枚举字段,单独维护取值表,例如方向标识 B 表示主动买、S 表示主动卖、N 表示未知或集合竞价成交,取值表要与交易所规范逐条核对。
还需要注意两个易错点。其一是精度因子不统一:不同市场、不同品种的最小价格单位可能不同,字典中应把精度因子作为独立字段或配置项,而不是硬编码在计算表达式里。其二是时间口径混用:原始时间串可能是交易所本地时间,衍生时间戳可能是 UTC 毫秒,两者必须在字典中写明时区与转换方式,否则跨系统对账时会出现整段偏移。把这些关系在字段体系总览阶段就固定下来,后续逐笔数据的解析、存储和回放才有稳定基础。