2. 高频行情数据基础:Tick级数据、快照数据、逐笔成交与逐笔委托的数据结构

高频行情数据是量化交易系统最底层的“燃料”。不同数据类型的结构、精度与更新频率,直接决定了策略计算的上限与回测的可靠性。本章将逐一拆解四种核心行情数据结构的字段定义、存储规范与工程落地要点。

2.1 数据结构总览与对比

下表从数据粒度、触发机制、典型字段数量与主要用途四个维度,对四种高频行情数据类型进行横向对比:

数据类型 数据粒度 触发机制 典型字段数 主要用途
Tick级数据 逐笔驱动 每笔成交或委托簿变化 8–12 实时行情推送、盘口监控
快照数据 定时切片 固定间隔(如 500ms / 1s) 20–40 策略回测、盘口重建
逐笔成交 单笔成交 每笔撮合完成 6–10 真实成交分析、订单流计算
逐笔委托 单笔订单 每笔委托进入/撤单 8–14 订单簿重建、微观结构研究
工程提示: 在实盘生产环境中,Tick 级数据与逐笔委托的数据量通常相差 1–2 个数量级。设计存储系统时,必须按数据类型分别规划写入吞吐量与压缩策略。

2.2 Tick级数据

Tick 级数据是交易所推送的最小行情单元,通常包含最新成交价、成交量、买卖盘口前五档等核心信息。其结构紧凑,更新频率可达毫秒级。

2.2.1 核心字段定义

字段名 类型 说明
ticker string 合约代码,如 "600519.SH"
timestamp int64 交易所时间戳,纳秒精度
last_price float64 最新成交价
volume int64 当日累计成交量
turnover float64 当日累计成交额
bid_price[5] float64[5] 买盘前五档价格
ask_price[5] float64[5] 卖盘前五档价格
bid_volume[5] int64[5] 买盘前五档数量
ask_volume[5] int64[5] 卖盘前五档数量

2.2.2 典型数据样例

{
  "ticker": "600519.SH",
  "timestamp": 1698765432123456789,
  "last_price": 1782.50,
  "volume": 1234567,
  "turnover": 2198765432.10,
  "bid_price": [1782.50, 1782.40, 1782.30, 1782.20, 1782.10],
  "ask_price": [1782.60, 1782.70, 1782.80, 1782.90, 1783.00],
  "bid_volume": [100, 200, 150, 80, 60],
  "ask_volume": [120, 180, 90, 70, 50]
}

2.3 快照数据

快照数据是交易所或行情服务商按固定时间间隔(如 500ms、1s)生成的“全量盘口”切片。它包含完整的买卖盘口深度、当日统计信息,是回测系统中最常用的数据源。

2.3.1 核心字段定义

字段名 类型 说明
ticker string 合约代码
snap_time int64 快照生成时间戳
bid_depth[10] float64[10] 买盘前十档价格
ask_depth[10] float64[10] 卖盘前十档价格
bid_depth_vol[10] int64[10] 买盘前十档数量
ask_depth_vol[10] int64[10] 卖盘前十档数量
open_interest int64 持仓量(期货/期权)
pre_close float64 前收盘价
high_limit float64 涨停价
low_limit float64 跌停价
数据治理警告: 不同交易所的快照间隔不一致(上交所 3s,深交所 1s,中金所 500ms)。跨市场回测时,必须对快照时间戳做对齐处理,否则会引入时序偏差。

2.4 逐笔成交

逐笔成交数据记录每一笔撮合交易的详细信息,是分析真实资金流向、识别大单拆单行为的关键数据源。

2.4.1 核心字段定义

字段名 类型 说明
ticker string 合约代码
trade_id int64 成交编号(全局唯一)
trade_time int64 成交时间戳
price float64 成交价格
volume int64 成交量(股/手)
buy_order_id int64 买方委托编号
sell_order_id int64 卖方委托编号
trade_flag int8 成交方向标志(0: 中性, 1: 主动买, 2: 主动卖)

2.4.2 数据样例

{
  "ticker": "IF2312",
  "trade_id": 987654321,
  "trade_time": 1698765432123457000,
  "price": 3980.20,
  "volume": 5,
  "buy_order_id": 100001,
  "sell_order_id": 100002,
  "trade_flag": 1
}

2.5 逐笔委托

逐笔委托数据记录每一笔订单的进入、修改与撤单行为。它是重建完整订单簿、研究市场微观结构的基础。

2.5.1 核心字段定义

字段名 类型 说明
ticker string 合约代码
order_id int64 委托编号
order_time int64 委托时间戳
order_type int8 委托类型(0: 限价, 1: 市价, 2: 撤单)
direction int8 买卖方向(1: 买, 2: 卖)
price float64 委托价格
volume int64 委托数量
status int8 状态(0: 有效, 1: 部分成交, 2: 全部成交, 3: 已撤单)

2.6 数据结构关系图

下图展示了四种高频行情数据在交易系统中的生成顺序与关联关系:

高频行情数据结构关系图 交易所撮合引擎 逐笔委托 逐笔成交 Tick级数据 快照数据 说明: • 逐笔委托与逐笔成交由交易所撮合引擎直接生成,是最高频的原始数据。 • Tick级数据是对逐笔成交与盘口变化的聚合推送;快照数据是定时全量切片。

2.7 数据治理要点

  • 时间戳对齐: 不同数据源的时间戳精度可能不同(纳秒 vs 微秒 vs 毫秒),必须统一转换为同一精度后再做关联分析。
  • 去重与校验: 逐笔成交与逐笔委托的 ID 应全局唯一,重复数据需在入库前过滤;快照数据需校验买卖盘口价格是否单调。
  • 存储压缩: 高频行情数据量极大,建议对价格字段使用 delta 编码,对数量字段使用 varint 编码,可压缩 60%–80%。
  • 回放一致性: 回测系统必须保证逐笔委托与逐笔成交的时间顺序与实盘一致,否则订单簿重建会出错。
实战建议: 在搭建高频行情数据库时,建议将 Tick 级数据与快照数据分别存储于不同的时序表,逐笔成交与逐笔委托则使用列式存储(如 Parquet)以提升查询性能。