4. 逐笔成交数据口径对齐:成交时间戳精度(毫秒/微秒)、成交价格、成交数量、成交金额、成交方向(主动买/主动卖)、成交编号的生成规则与对齐方法
逐笔成交是 Level-2 行情中最微观、最核心的数据流之一。每一笔成交记录对应交易所撮合引擎的一次实际成交,是计算资金流向、主力动向、高频因子和盘口还原的基础。不同交易所(沪深北)在时间戳精度、字段定义、编号规则上存在显著差异,对齐时必须逐字段校准。
4.1 核心字段口径对比
下表列出沪深北三地逐笔成交主要字段的精度与生成规则差异:
| 字段 | 上海证券交易所 | 深圳证券交易所 | 北京证券交易所 |
|---|---|---|---|
| 成交时间戳 | 毫秒级(3位小数) | 微秒级(6位小数) | 毫秒级(3位小数) |
| 成交价格 | 成交价(元),保留2位小数 | 成交价(元),保留2位小数 | 成交价(元),保留2位小数 |
| 成交数量 | 股(整数) | 股(整数) | 股(整数) |
| 成交金额 | 元(保留2位小数) | 元(保留2位小数) | 元(保留2位小数) |
| 成交方向 | 主动买/主动卖(由成交编号奇偶性判定) | 主动买/主动卖(由成交编号奇偶性判定) | 主动买/主动卖(由成交编号奇偶性判定) |
| 成交编号 | 交易所流水号,全局递增 | 交易所流水号,全局递增 | 交易所流水号,全局递增 |
对齐要点:时间戳精度差异是跨市场数据融合的最大障碍。深交所微秒级时间戳在合并上交所毫秒级数据时,需要做精度截断或对齐处理,否则会导致时间轴错位。
4.2 成交时间戳精度对齐
时间戳对齐的核心原则是:以高精度向低精度对齐,避免信息丢失。具体步骤如下:
- 统一时间基准:将所有时间戳转换为 Unix 时间戳(自 1970-01-01 00:00:00 UTC 起的毫秒数或微秒数)。
- 精度截断:深交所微秒级时间戳(如 1630000000.123456)在与上交所毫秒级数据合并时,截断为毫秒级(1630000000.123)。
- 时间窗口对齐:对于同一笔成交在不同交易所的微秒级差异,使用成交编号和成交价格进行二次校验,避免因时间戳截断导致错配。
# 时间戳精度对齐示例(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 | 按成交时间顺序递增,不重复 | 注意编号可能跨交易日重置 |
对齐方法:
- 去重:同一交易所内,成交编号唯一,可直接用于去重。
- 跨市场关联:不同交易所的成交编号无关联,不能用于跨市场匹配。跨市场对齐必须依赖时间戳 + 成交价格 + 成交数量的组合。
- 连续性检查:如果发现成交编号不连续,说明可能存在数据缺失,需要标记并做插值或剔除处理。
4.5 逐笔成交数据对齐流程
下图展示了从原始逐笔成交数据到对齐后标准数据集的完整流程:
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 毫秒)。