2. Tick数据基础

在构建任何量化交易或行情分析系统之前,理解Tick数据的本质是第一步。Tick数据是市场在最小时间粒度上产生的原始记录,它描述了某只标的在某一瞬间发生的成交或委托变化。与K线不同,Tick数据不经过聚合,保留了市场微观结构的全部细节,因此它既是高频策略的燃料,也是回测精度和滑点建模的基础。

一、Tick数据的定义与核心原理

Tick数据通常指交易所行情网关推送的逐笔消息,主要包括两类:逐笔成交(Trade)和逐笔委托(Order)。逐笔成交记录“谁在什么时间以什么价格成交了多少”,逐笔委托记录“谁在什么时间提交或撤销了什么价位的订单”。两者共同构成订单簿重建的输入。

核心原理在于:市场状态由订单簿驱动,而订单簿的每一次变化都对应一条Tick消息。通过按时间顺序回放这些消息,可以精确还原任意时刻的盘口深度、成交分布和买卖压力。这也是Tick数据工程流水线需要解决的核心问题——如何高效地采集、清洗、存储和回放这些消息。

关键认知:Tick数据不是“每秒一条”,而是“每笔一条”。同一毫秒内可能有多条成交,也可能长时间没有成交。因此,Tick数据的行数并不等于时间长度,不能用固定频率假设来处理。

二、字段结构与时间戳精度

不同交易所的Tick字段命名和数量差异很大,但核心字段可以归纳为以下几类:

字段类别典型字段说明
标识symbol、exchange、channel标的代码、交易所、频道
时间timestamp、exchange_time、local_time交易所时间与本地接收时间
价格price、last_price、bid/ask成交价或盘口价
数量volume、size、qty成交数量或委托数量
方向side、direction、bs_flag买/卖,主动/被动
订单order_id、bid_order_id、ask_order_id委托编号,用于订单簿重建
类型type、event_type成交、委托、撤单等

时间戳精度是Tick数据工程中最容易被忽视却影响最大的参数。常见精度包括:

  • 秒级:早期行情或部分外汇数据,同一秒内多笔成交无法区分顺序。
  • 毫秒级:多数股票和期货交易所的逐笔数据,如沪深交易所的逐笔委托和逐笔成交。
  • 微秒级:部分期货交易所和加密货币交易所,适合高频策略。
  • 纳秒级:少数交易所或托管环境,用于极低延迟场景。

在工程实现中,必须明确区分交易所时间和本地接收时间。交易所时间是事件发生的真实时间,本地接收时间包含网络延迟和排队延迟。回测时应优先使用交易所时间,而实盘监控中两者都需要记录,用于延迟分析。

# 典型Tick数据结构示例(JSON)
{
  "symbol": "BTCUSDT",
  "exchange": "BINANCE",
  "event_type": "trade",
  "exchange_time": 1710000000123456,  # 微秒
  "local_time": 1710000000125678,     # 微秒
  "price": 65000.5,
  "qty": 0.12,
  "side": "BUY",
  "trade_id": "123456789"
}

三、交易所差异与常见应用场景

不同交易所的Tick数据在字段、推送频率、时间戳格式和订单簿机制上存在显著差异。以下对比几个典型市场:

  • 沪深股票:逐笔成交和逐笔委托分开推送,时间戳为毫秒,包含买卖订单号,支持订单簿重建。存在集合竞价和连续竞价阶段,字段含义不同。
  • 国内期货:多数交易所提供毫秒级快照和逐笔成交,部分品种有逐笔委托。时间戳精度和字段命名因交易所而异,如郑商所和大商所的字段结构不同。
  • 加密货币:通常提供WebSocket推送的逐笔成交和增量深度,时间戳为微秒或纳秒,7×24小时运行,数据量极大。
  • 外汇:多为报价流(Quote),包含买卖价和量,时间戳精度高,但无统一交易所,数据源分散。

工程建议:在流水线设计初期就建立统一的内部Tick Schema,将不同交易所的字段映射到标准字段,并保留原始字段用于排查。时间戳统一转换为微秒或纳秒整数,避免浮点误差。

Tick数据的常见应用场景包括:

  1. 高频回测:基于逐笔成交和订单簿重建,模拟真实成交和滑点。
  2. 市场微观结构分析:研究买卖价差、订单流不平衡、成交分布。
  3. 实时风控:监控异常成交、撤单率和盘口变化。
  4. 交易信号生成:利用Tick级特征构建短周期预测模型。
  5. 数据质量监控:检测丢包、乱序、重复和时间戳异常。
Tick数据从交易所到策略的流转与时间戳层级 交易所撮合系统 逐笔成交 / 逐笔委托 交易所时间戳 行情网关 / 采集器 网络接收 + 本地时间戳 协议解析 消息队列 / 缓冲 Kafka / Redis 顺序保证 存储 列式/时序库 回放引擎 时间戳层级与延迟构成 交易所时间 事件真实发生 网关接收时间 网络传输延迟 解析完成时间 协议解析耗时 策略可见时间 排队+处理延迟 回测使用交易所时间,实盘监控需同时记录各层时间以定位延迟瓶颈

四、常见误区与复盘要点

误区一:把快照当Tick。很多数据源提供的是500ms或1s的快照,而非真正的逐笔。快照会丢失同一时间窗口内的多笔成交和撤单,回测结果会严重失真。

误区二:忽略时间戳精度转换。将毫秒时间戳直接当微秒使用,会导致时间轴错乱。必须在入库前统一单位并校验单调性。

误区三:不处理乱序和重复。网络抖动和重连可能导致Tick乱序或重复。流水线中应加入序列号校验和去重逻辑。

误区四:用本地时间做回测。本地时间包含网络延迟,不同机器差异大,回测应统一使用交易所时间。

复盘时建议检查以下清单:

  • 时间戳单位是否统一?是否单调递增?
  • 字段映射是否覆盖所有交易所?缺失字段如何处理?
  • 是否区分了成交和委托?订单簿重建逻辑是否正确?
  • 数据中是否存在重复、乱序、丢包?监控指标是否到位?
  • 回测使用的Tick数据是否与实盘采集精度一致?

掌握Tick数据的定义、字段结构、时间戳精度和交易所差异,是后续数据采集、清洗、存储和回放工程的基础。只有在源头把数据理解清楚,才能构建出可靠、可复现的Tick数据流水线。