3、Tick数据字段解析:时间戳、最新价、成交量、成交额、买卖盘口(Bid/Ask)、逐笔成交

Tick数据是金融市场最细粒度的行情快照,每一笔Tick都完整记录了某一时刻的微观市场状态。理解Tick数据各字段的含义、精度与对齐规则,是进行高频策略回测、盘口分析与交易成本估算的基础。本节将逐一解析Tick数据的核心字段,并说明它们在多数据源间的口径差异。

3.1 字段总览与数据类型

标准Tick数据通常包含以下核心字段,各字段的数据类型与精度直接影响存储与计算效率:

字段名称 英文标识 数据类型 精度/单位 说明
时间戳 Timestamp INT64 / DateTime 毫秒或微秒 行情发生或接收的精确时间
最新价 LastPrice FLOAT64 最小变动价位 当前最后一笔成交价格
成交量 Volume INT64 股/手/张 从开盘累计到当前的总成交量
成交额 Turnover FLOAT64 元/美元 从开盘累计到当前的总成交金额
买一价 BidPrice1 FLOAT64 最小变动价位 最高买入申报价格
买一量 BidVolume1 INT64 股/手/张 最高买入申报数量
卖一价 AskPrice1 FLOAT64 最小变动价位 最低卖出申报价格
卖一量 AskVolume1 INT64 股/手/张 最低卖出申报数量
逐笔成交标识 TradeFlag INT8 / String 枚举值 标记主动买/卖/未知
精度对齐提示:不同交易所对时间戳精度要求不同。沪深交易所Level-2行情时间戳精度为毫秒,而部分期货交易所已支持微秒级时间戳。在跨市场对齐时,必须统一时间精度,否则会导致订单簿重建错位。

3.2 时间戳:Tick数据的锚点

时间戳是Tick数据最重要的字段,决定了数据对齐的先后顺序。实际应用中需关注以下三个时间点:

  • 交易所时间(Exchange Time):撮合引擎生成行情的时间,是官方基准。
  • 行情网关时间(Gateway Time):券商或数据商收到行情的时间,通常比交易所时间晚几毫秒。
  • 本地记录时间(Local Time):用户程序写入数据库的时间,受网络延迟与系统时钟影响最大。

在标签口径对齐时,应优先使用交易所时间作为对齐基准。若数据源仅提供本地时间,需通过NTP同步或延迟校准算法进行修正。

对齐规则:同一笔Tick数据,不同数据源的时间戳差异不应超过100毫秒(股票市场)或10毫秒(期货市场)。超过该阈值的数据应标记为“时间戳异常”并进入清洗流程。

3.3 最新价与成交量/成交额

最新价(LastPrice)与成交量(Volume)、成交额(Turnover)共同描述了当前成交的规模与价格水平。需注意以下口径差异:

  • 累计 vs 单笔:多数Tick数据中的Volume为当日累计值,需通过差分计算单笔成交量;少数数据源直接提供单笔成交量。
  • 复权影响:最新价通常为实际成交价,不包含复权调整。回测时需额外引入复权因子。
  • 成交额计算:成交额 = 最新价 × 单笔成交量,但部分数据源使用撮合时的实际成交金额(可能因费用或四舍五入存在微小差异)。
# 示例:从累计成交量计算单笔成交量
def compute_tick_volume(df):
    df['SingleVolume'] = df['Volume'].diff()
    # 开盘第一笔或数据中断时,diff可能为负值,需置为NaN
    df.loc[df['SingleVolume'] < 0, 'SingleVolume'] = None
    return df

3.4 买卖盘口(Bid/Ask):订单簿第一档

买卖盘口数据反映了当前市场最优的买卖意愿。标准Tick数据通常包含买一至买五、卖一至卖五共十档数据,但在标签对齐场景中,最常用的是买一(BidPrice1/BidVolume1)和卖一(AskPrice1/AskVolume1)。

盘口字段的关键对齐点包括:

  • 价格档位对齐:不同交易所的最小变动价位不同(如A股0.01元,期货可能为0.2点),对齐时需按目标市场的最小变动价位进行取整。
  • 盘口快照 vs 逐笔:盘口数据是某一时刻的静态快照,而逐笔成交是动态事件。在时间戳上,盘口快照通常略早于同一时刻的逐笔成交。
  • 买卖价差(Spread):AskPrice1 - BidPrice1,是衡量市场流动性的核心指标。当价差为0时,表示发生了“价格重叠”,常见于撮合瞬间。
常见陷阱:部分数据源在盘口无变化时不推送新Tick,导致时间戳不连续。此时若直接使用差分计算成交量,会遗漏中间累积量,必须进行时间戳插值或重采样处理。

3.5 逐笔成交:交易方向与标识

逐笔成交(Trade)记录了每一笔实际发生的交易,包含成交价格、数量、时间以及主动买卖方向。主动买卖方向通过TradeFlag字段标识:

标识值 含义 判定规则
B 主动买(Buy) 成交价 ≥ 卖一价
S 主动卖(Sell) 成交价 ≤ 买一价
N 未知/双边 成交价在买卖价之间或数据源未提供

在标签对齐时,逐笔成交的TradeFlag必须与盘口数据联合校验。若某笔成交标记为主动买,但其价格低于当时的买一价,则该笔数据存在逻辑冲突,应标记为“方向异常”。

3.6 字段关系与对齐流程

下图展示了Tick数据各字段之间的逻辑关系与对齐处理流程:

Tick数据字段关系与对齐流程 原始Tick数据 时间戳 最新价/成交量/额 买卖盘口(Bid/Ask) 逐笔成交标识 时间戳对齐 成交量差分/复权 盘口档位取整 方向校验 字段交叉校验与标签生成 对齐后的标准Tick数据 异常数据标记 进入清洗流程

3.7 字段对齐检查清单

在实际工程中,建议按以下清单逐项检查Tick数据字段的对齐质量:

  1. 时间戳连续性:检查是否存在超过1秒(股票)或500毫秒(期货)的时间间隔,标记为“数据断层”。
  2. 价格档位合规:最新价、买一价、卖一价是否均为最小变动价位的整数倍,否则标记为“价格精度异常”。
  3. 成交量单调性:累计成交量序列是否严格非递减,出现递减时标记为“成交量回退”。
  4. 买卖价差非负:AskPrice1 - BidPrice1 >= 0,若为负值则标记为“盘口倒挂”。
  5. 逐笔方向自洽:TradeFlag为B时,成交价应不低于卖一价;为S时,成交价应不高于买一价。
最佳实践:建议在数据入库前编写自动化校验脚本,对上述5项规则进行逐笔扫描。通过校验的数据打上“clean”标签,未通过的进入人工复核队列。这能大幅降低后续策略回测中的“脏数据”风险。