4. 逐笔成交数据口径对齐:成交时间戳精度(毫秒/微秒)、成交价格、成交数量、成交金额、成交方向(主动买/主动卖)、成交编号的生成规则与对齐方法

逐笔成交是 Level-2 行情中最微观、最核心的数据流之一。每一笔成交记录对应交易所撮合引擎的一次实际成交,是计算资金流向、主力动向、高频因子和盘口还原的基础。不同交易所(沪深北)在时间戳精度、字段定义、编号规则上存在显著差异,对齐时必须逐字段校准。

4.1 核心字段口径对比

下表列出沪深北三地逐笔成交主要字段的精度与生成规则差异:

字段 上海证券交易所 深圳证券交易所 北京证券交易所
成交时间戳 毫秒级(3位小数) 微秒级(6位小数) 毫秒级(3位小数)
成交价格 成交价(元),保留2位小数 成交价(元),保留2位小数 成交价(元),保留2位小数
成交数量 股(整数) 股(整数) 股(整数)
成交金额 元(保留2位小数) 元(保留2位小数) 元(保留2位小数)
成交方向 主动买/主动卖(由成交编号奇偶性判定) 主动买/主动卖(由成交编号奇偶性判定) 主动买/主动卖(由成交编号奇偶性判定)
成交编号 交易所流水号,全局递增 交易所流水号,全局递增 交易所流水号,全局递增
对齐要点:时间戳精度差异是跨市场数据融合的最大障碍。深交所微秒级时间戳在合并上交所毫秒级数据时,需要做精度截断或对齐处理,否则会导致时间轴错位。

4.2 成交时间戳精度对齐

时间戳对齐的核心原则是:以高精度向低精度对齐,避免信息丢失。具体步骤如下:

  1. 统一时间基准:将所有时间戳转换为 Unix 时间戳(自 1970-01-01 00:00:00 UTC 起的毫秒数或微秒数)。
  2. 精度截断:深交所微秒级时间戳(如 1630000000.123456)在与上交所毫秒级数据合并时,截断为毫秒级(1630000000.123)。
  3. 时间窗口对齐:对于同一笔成交在不同交易所的微秒级差异,使用成交编号和成交价格进行二次校验,避免因时间戳截断导致错配。
# 时间戳精度对齐示例(Python)
import pandas as pd

# 深交所微秒级时间戳
sz_timestamp = 1630000000.123456
# 截断为毫秒级
ms_timestamp = int(sz_timestamp * 1000) / 1000  # 1630000000.123

# 上交所毫秒级时间戳
sh_timestamp = 1630000000.123

# 对齐后比较
assert ms_timestamp == sh_timestamp, "时间戳对齐失败"

4.3 成交方向判定规则

成交方向(主动买/主动卖)是逐笔成交中最关键的标签之一,直接影响资金流向计算。沪深北三地均采用成交编号奇偶性判定规则:

  • 偶数编号:主动买(买方主动吃单)
  • 奇数编号:主动卖(卖方主动吃单)
常见陷阱:部分数据源在传输过程中可能对成交编号进行重新编码或补位,导致奇偶性反转。对齐时必须使用原始交易所流水号,避免使用中间件重新生成的编号。

4.4 成交编号生成规则与对齐方法

成交编号是交易所撮合引擎为每一笔成交分配的全局唯一流水号。生成规则如下:

交易所 编号格式 生成规则 对齐注意事项
上海 纯数字,如 1234567890 按成交时间顺序递增,不重复 注意编号可能跨交易日重置
深圳 纯数字,如 9876543210 按成交时间顺序递增,不重复 注意编号可能跨交易日重置
北京 纯数字,如 1122334455 按成交时间顺序递增,不重复 注意编号可能跨交易日重置

对齐方法:

  1. 去重:同一交易所内,成交编号唯一,可直接用于去重。
  2. 跨市场关联:不同交易所的成交编号无关联,不能用于跨市场匹配。跨市场对齐必须依赖时间戳 + 成交价格 + 成交数量的组合。
  3. 连续性检查:如果发现成交编号不连续,说明可能存在数据缺失,需要标记并做插值或剔除处理。

4.5 逐笔成交数据对齐流程

下图展示了从原始逐笔成交数据到对齐后标准数据集的完整流程:

逐笔成交数据对齐流程 原始逐笔成交数据 步骤1:时间戳精度统一 步骤2:成交方向判定 步骤3:成交编号去重 步骤4:金额校验 步骤5:跨市场关联 对齐后标准数据集 说明: 步骤4中金额校验公式: 金额 = 价格 × 数量

4.6 金额校验与常见问题

成交金额字段虽然由交易所直接提供,但在数据加工过程中可能出现精度丢失或计算错误。建议使用以下公式进行校验:

# 金额校验公式
成交金额(元) = 成交价格(元) × 成交数量(股)

# 示例
price = 10.25  # 元
volume = 1000  # 股
amount = price * volume  # 10250.00 元

# 校验:交易所提供的金额与计算金额差异应小于 0.01 元
assert abs(amount - exchange_amount) < 0.01, "金额校验失败"
实战案例:某次数据处理中发现深交所逐笔成交金额与价格×数量计算结果相差 0.01 元,原因是交易所对金额做了四舍五入处理,而计算时使用了浮点数精度问题。解决方案:统一使用 Decimal 类型进行计算,避免浮点数误差。

4.7 对齐后数据质量检查清单

  • 时间戳连续性:同一只股票在同一交易日内,逐笔成交时间戳应严格递增,无回退。
  • 成交编号唯一性:同一交易所内,成交编号不应重复。
  • 方向标签一致性:主动买对应的成交编号为偶数,主动卖为奇数。
  • 金额校验通过率:校验通过率应达到 99.99% 以上,异常数据需标记并人工复核。
  • 跨市场时间对齐:同一时刻在不同交易所发生的成交,时间戳差异应在合理范围内(通常小于 1 毫秒)。