2. 逐笔成交数据解析
逐笔成交(Tick Trade)是交易所行情中最细粒度的成交记录,每发生一笔撮合成交就产生一条记录。它不同于快照行情(Snapshot)按固定频率切片,而是"事件驱动"的——有成交才有记录,没有成交就没有记录。这一特性决定了逐笔成交数据在刻画交易活跃度时具有天然优势,同时也带来了字段理解、时间戳对齐和间隔计算上的诸多细节问题。本节围绕"一条逐笔成交记录到底包含什么、时间戳精度如何影响计算、成交间隔怎么算、数据里有哪些坑"展开。
一、逐笔成交记录的典型字段
不同市场(沪深交易所、期货交易所、境外市场)的逐笔成交字段命名略有差异,但核心语义高度一致。以常见的 Level-2 逐笔成交为例,一条记录通常包含以下字段:
- 证券代码 / 合约代码:标识标的,是分组计算间隔的第一维度。
- 成交时间:精确到毫秒甚至微秒的时间戳,是计算间隔的核心字段。
- 成交价格:本笔撮合的成交价。
- 成交数量:本笔成交的股数或手数。
- 成交金额:价格×数量,部分数据源直接给出。
- 买卖方向标识:主动买(外盘)或主动卖(内盘),反映成交由哪一方发起。
- 成交编号 / 序列号:交易所分配的递增序号,用于排序和去重。
- 买方/卖方订单号:部分数据源提供,可用于订单级追踪。
需要特别注意的是成交编号与时间戳的关系:成交编号是严格递增的,但时间戳在毫秒精度下可能出现多笔成交共享同一时间戳的情况。这意味着"按时间排序"和"按编号排序"在极端情况下可能不一致,计算间隔时应以成交编号为主排序键、时间戳为辅,避免同一毫秒内多笔成交的顺序错乱导致间隔出现负值或零值堆积。
二、时间戳精度与对齐
时间戳精度直接决定了成交间隔的分辨率。若数据精度为秒级,那么同一秒内的多笔成交间隔全部记为 0,间隔分布会被严重压缩,活跃度指标失真;毫秒级精度下,间隔最小分辨率为 1ms,能较好刻画高频交易节奏;微秒级精度则适用于超高频场景。实际处理时,第一步应确认数据源的时间精度,并在文档中明确记录,避免后续把"精度不足导致的 0 间隔"误判为"真实的高频连续成交"。
时间戳对齐涉及两个层面。其一是时区与基准对齐:交易所时间通常为本地时区,跨市场数据合并时需统一到同一时区基准。其二是与快照/其他数据源对齐:逐笔成交时间戳与快照时间戳的语义不同——快照时间戳是"切片生成时刻",逐笔成交时间戳是"撮合发生时刻",两者不能直接相减当作延迟。若要做事件研究,应明确以哪一方的时钟为基准,并在全文保持一致。
三、成交间隔的计算方法
成交间隔(Trade Interval)最常用的定义是同一标的相邻两笔成交的时间差。计算步骤如下:
- 按证券代码分组,组内按成交编号升序(时间戳为辅)排序。
- 对每组计算
interval_i = t_i - t_{i-1},首笔记录的间隔记为缺失值(NaN),不参与统计。 - 将间隔单位统一(毫秒或秒),并剔除异常值(如跨午休、跨交易日产生的大间隔)。
这里有一个容易被忽略的细节:跨午休和跨交易日的大间隔必须剔除或分段处理。A 股上午 11:30 收盘、下午 13:00 开盘,若直接相减会得到 90 分钟的"伪间隔",严重拉高均值。正确做法是按交易时段分段计算,或在计算前将非交易时段的时间戳压缩掉。同理,隔夜间隔也不应计入日内活跃度统计。
基于间隔,可以派生出一组活跃度指标:平均成交间隔、间隔中位数、间隔标准差(衡量成交节奏的稳定性)、单位时间成交笔数(即间隔的倒数均值)。中位数比均值更稳健,因为间隔分布通常右偏,少数大间隔会显著拉高均值。
四、常见数据质量问题与处理
逐笔成交数据在实际使用中几乎不可能"干净",以下几类问题最为常见,处理方式也各有讲究。
时间戳重复导致的零间隔堆积。毫秒精度下,活跃标的在同一毫秒内可能撮合多笔,这些记录的间隔全部为 0。若直接用均值统计,会低估真实间隔;若用中位数,又可能被大量 0 拉低。处理思路是:先按成交编号排序确认顺序,再决定是否将同毫秒成交合并为一笔(合并时数量求和、价格取加权均价),或保留明细但在统计时说明零间隔占比。
重复记录。行情重传、补发机制会导致同一成交编号出现多条记录。若不去重,间隔计算会出现 0 值,成交笔数被虚增。去重键应使用"成交编号+代码",而非仅用时间戳。
时间戳乱序。多路数据合并或网络传输延迟可能造成记录乱序,直接相减会出现负间隔。正确做法是先按编号排序再计算,而不是信任原始文件的行顺序。
缺失与断档。数据源中断会造成某段时间无记录,表现为一个异常大的间隔。这类间隔与真实的"冷清"难以从数据本身区分,需要结合数据源日志或与快照成交量交叉验证——若该时段快照显示有成交而逐笔缺失,则属于数据缺失而非真实冷清。
五、一个可复用的检查清单
综合以上内容,处理一批逐笔成交数据时,建议按以下顺序完成检查,形成可复用的处理记录:确认时间戳精度(秒/毫秒/微秒)并记录;按"代码+成交编号"去重;按代码分组、编号升序排序;按交易时段切分,剔除跨午休与隔夜间隔;统计零间隔占比、负间隔数量、最大间隔;对同毫秒多笔成交决定合并或保留策略;最后再计算平均间隔、中位数、标准差与单位时间成交笔数。把这套流程固化为脚本或模板,后续每批数据都能得到口径一致、可比较的活跃度指标,这也是逐笔成交间隔分析能够真正用于策略研究的前提。