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       毫秒             衍生

四、字段间的逻辑关系

逐笔成交字段不是孤立的,它们之间存在明确的约束与推导关系,这正是字典需要表达的核心。第一是唯一性关系:同一交易日内,成交序号单调递增且唯一,可作为主键;证券代码+成交序号构成全局唯一标识。第二是计算关系:成交金额由价格与数量按精度因子换算得到,方向聚合量由方向标识分组累加得到。第三是时序关系:成交时间与成交序号应同向递增,若出现序号增大而时间回退,说明存在乱序或跨频道拼接问题,需要在字典的“校验规则”中标注。第四是枚举约束:方向标识只能取约定集合内的值,成交类型需与交易所定义一致。

把这些关系画成一张字段关系图,比逐条文字描述更容易在团队内对齐口径。下图以一笔逐笔成交记录为中心,展示原始字段、衍生字段及其依赖方向。

逐笔成交字段关系总览 交易所原始字段 trade_seq_num(成交序号) trade_time_raw(成交时间) trade_price(成交价格) trade_volume(成交数量) trade_bs_flag(买卖方向) trade_type(成交类型) 逐笔成交记录 证券代码 + 成交序号 构成全局唯一主键 按时间与序号排序 本地衍生字段 trade_amount(成交金额) trade_time_ms(毫秒时间戳) trade_interval_ms(成交间隔) active_buy_vol(主动买量) price_delta_dir(价格变动方向) seq_offset(序号累计偏移) 字段约束与校验规则 ① 成交序号当日单调递增且唯一,与证券代码联合构成主键;② 成交金额 = 价格 × 数量 × 精度因子,须用定点整数计算; ③ 成交时间与序号应同向递增,出现回退即标记乱序;④ 方向标识仅取约定枚举值,越界值进入异常队列; ⑤ 衍生字段必须登记计算表达式与依赖的原始字段,保证口径可复现。

五、落地时的整理要点

在实际整理字典时,建议以“一条逐笔成交记录”为行、以字段为列建立主表,每列至少包含:标准名、原始名、来源类型(原始/衍生)、数据类型、单位与精度、取值范围或枚举、计算表达式(衍生必填)、校验规则。对于枚举字段,单独维护取值表,例如方向标识 B 表示主动买、S 表示主动卖、N 表示未知或集合竞价成交,取值表要与交易所规范逐条核对。

还需要注意两个易错点。其一是精度因子不统一:不同市场、不同品种的最小价格单位可能不同,字典中应把精度因子作为独立字段或配置项,而不是硬编码在计算表达式里。其二是时间口径混用:原始时间串可能是交易所本地时间,衍生时间戳可能是 UTC 毫秒,两者必须在字典中写明时区与转换方式,否则跨系统对账时会出现整段偏移。把这些关系在字段体系总览阶段就固定下来,后续逐笔数据的解析、存储和回放才有稳定基础。