2. Tick数据基础:概念、结构与采集规范

Tick数据是金融市场最细粒度的交易记录,每一笔逐笔成交或每一次盘口变动都会生成一条Tick记录。在坏账率哨兵模型中,Tick数据直接决定了回放验证的时间分辨率与信号捕捉精度。本节从概念、数据结构、数据源与采集规范三个层面建立Tick数据的基础认知。

2.1 Tick数据的概念

Tick数据(逐笔数据)是指交易所或做市商系统在连续交易过程中,对每一笔成交或每一次买卖盘口变化进行实时记录的最小数据单元。与分钟线、日线等聚合K线不同,Tick数据保留了交易发生时的完整微观结构。

对比维度 Tick数据 分钟K线 日K线
时间粒度 毫秒/微秒级 1分钟/5分钟 1个交易日
记录方式 逐笔成交/逐笔盘口 聚合统计 日终统计
信息量 完整微观结构 丢失盘口细节 丢失日内波动
坏账哨兵价值 可还原每笔挂单与成交 无法定位具体坏账时刻 仅用于日终归因
关键认知:坏账率哨兵模型依赖Tick数据还原“挂单→成交→撤单→坏账”的完整链路。分钟级数据会丢失盘口瞬间变化,导致坏账事件被聚合掩盖。

2.2 Tick数据结构

一条完整的Tick记录通常包含以下核心字段。根据数据用途(成交Tick vs 盘口Tick),字段组合略有差异。

2.2.1 核心字段清单

字段名 类型 说明 哨兵模型用途
时间戳 datetime / int64 交易所撮合时间,精度通常为毫秒或微秒 回放对齐、事件排序
最新成交价 float64 当前Tick的成交价格 计算滑点、坏账损失
成交量 int64 当前Tick的成交数量(股/手) 流动性判断、大单识别
买一价 float64 最优买入报价 盘口深度、挂单成本
买一量 int64 最优买入报价对应的挂单量 流动性深度、冲击成本
卖一价 float64 最优卖出报价 盘口深度、挂单成本
卖一量 int64 最优卖出报价对应的挂单量 流动性深度、冲击成本
成交方向 char / int 主动买/主动卖/未知 识别资金流向、坏账方向
成交编号 string / int64 交易所唯一成交流水号 去重、关联订单

2.2.2 数据结构示例(JSON格式)

{
  "symbol": "600519.SH",
  "timestamp": 1712563200123,        // 毫秒级时间戳
  "price": 172.50,
  "volume": 200,
  "bid_price": 172.48,
  "bid_volume": 1500,
  "ask_price": 172.52,
  "ask_volume": 800,
  "trade_direction": "BUY",
  "trade_id": "T2024040812345678"
}
实践建议:在哨兵模型回放中,建议同时保留成交Tick和盘口Tick。成交Tick用于计算实际坏账损失,盘口Tick用于还原挂单排队与撤单行为。

2.3 Tick数据源与采集规范

不同数据源提供的Tick数据在精度、覆盖范围、延迟和成本上差异显著。选择数据源时需综合考虑回放场景的精度要求与预算约束。

2.3.1 主流Tick数据源对比

数据源 时间精度 覆盖市场 典型延迟 成本 适用场景
交易所直连 微秒级 单一交易所 <1ms 极高 高频做市、实时风控
专业数据商 毫秒级 多市场 10-100ms 中高 量化回测、哨兵模型
券商API 秒级 单一券商 1-5s 低 个人回测、教学
开源数据 秒级或聚合 有限 非实时 免费 原型验证、学习

2.3.2 采集规范要点

  1. 时间同步:所有Tick记录必须使用交易所撮合时间戳,禁止使用本地接收时间。本地时间与交易所时间偏差超过1ms时,回放顺序可能错乱。
  2. 去重机制:同一成交编号只保留第一条记录。网络重传或数据商冗余推送会导致重复Tick,必须在入库前完成去重。
  3. 缺失处理:盘口Tick在无成交时仍可能更新(如撤单、改价)。采集程序应持续监听盘口变化,不能仅依赖成交事件触发。
  4. 存储格式:推荐使用列式存储(Parquet/Arrow)或时序数据库(InfluxDB/ClickHouse),避免CSV逐行读写带来的性能瓶颈。
  5. 校验规则:每条Tick必须满足:bid_price <= ask_price,volume >= 0,price > 0。异常数据应标记并隔离,不直接丢弃。
常见陷阱:部分数据商将“无成交时的盘口快照”与“成交Tick”合并为同一时间戳。哨兵模型回放时需区分两类事件,否则会错误地将盘口变化归因为成交行为。

2.4 Tick数据采集架构

下图展示了一套典型的Tick数据采集与存储架构,适用于哨兵模型回放场景。架构分为数据源层、采集层、存储层和回放层四个部分。

Tick数据采集与存储架构 Tick数据采集与存储架构(哨兵模型回放场景) 数据源层 交易所直连 | 专业数据商 | 券商API | 开源数据 采集层 时间同步 | 去重 | 缺失处理 | 校验规则 存储层 列式存储(Parquet/Arrow) | 时序数据库(InfluxDB/ClickHouse) 回放层 哨兵模型回放引擎 | 坏账率计算 | 信号验证

2.5 Tick数据质量检查清单

在将Tick数据接入哨兵模型前,建议按以下清单逐项检查数据质量。任何一项不满足都可能导致回放结果失真。

检查项 合格标准 不合格处理
时间戳单调递增 无逆序、无跳跃 按时间戳重排序,标记异常段
盘口价差非负 bid_price ≤ ask_price 剔除或修正该Tick
成交量非负 volume ≥ 0 剔除负值,记录缺失
成交编号唯一 无重复trade_id 保留首条,删除重复
连续交易时段完整 无超过5秒的盘口空白 插值或标记为“数据中断”
价格波动范围合理 涨跌幅不超过交易所限制 标记异常,人工复核
哨兵模型特别要求:坏账率计算对盘口深度敏感。如果Tick数据中买一量/卖一量长期为0或异常偏小,应优先排查数据源是否提供了完整的盘口快照,而非仅提供成交Tick。