高频 Tick 数据基础:定义、结构与核心字段
高频 Tick 数据是量化风控与市场微观结构分析的最小粒度数据源。每一笔 Tick 记录市场在某一瞬间的快照,其精度可达毫秒甚至微秒级。理解 Tick 数据的定义、数据结构与常见字段,是构建坏账率 PSI 哨兵系统的第一道门槛。
1. Tick 数据定义
Tick 数据(逐笔快照数据)指交易所或做市商在连续竞价过程中,按时间顺序逐笔发布的行情快照。与 K 线(OHLC)不同,Tick 数据不进行聚合,它忠实记录每一笔成交或每一次盘口变动。
- 逐笔成交 Tick:每发生一笔交易即生成一条记录,包含成交价格、成交量、成交方向。
- 逐笔盘口 Tick:每当买卖挂单队列发生变动(新增、撤销、成交)时生成,包含当前最优买卖价与量。
- 快照 Tick:以固定时间间隔(如 100ms、500ms)拍摄的完整盘口深度快照。
风控视角提示: 坏账率 PSI 哨兵依赖 Tick 级数据捕捉流动性突变与价格异动。若使用聚合后的分钟级数据,将丢失盘口崩塌前 200ms 的关键信号。
2. 数据结构与存储模型
高频 Tick 数据通常以“宽表 + 时间分区”的形式存储,每行代表一个时间点的完整快照。以下为典型的数据表结构:
| 字段名 | 类型 | 说明 | 示例 |
|---|---|---|---|
ts_event |
Timestamp(ms) | 事件发生时间戳(毫秒级) | 2025-03-21 09:30:00.123 |
symbol |
String | 交易品种代码 | BTC-USDT |
price |
Float64 | 最新成交价格 | 67500.50 |
volume |
Float64 | 该笔成交量(基础货币单位) | 0.023 |
side |
Char(1) | 成交方向:B=主动买,S=主动卖 | B |
bid_px |
Float64 | 当前最优买价 | 67500.00 |
bid_sz |
Float64 | 当前最优买量 | 1.500 |
ask_px |
Float64 | 当前最优卖价 | 67501.00 |
ask_sz |
Float64 | 当前最优卖量 | 0.800 |
存储建议: 使用 Parquet 列式存储 + ZSTD 压缩,按
symbol 分区、ts_event 排序。单日 BTC-USDT Tick 数据约 2~5 亿行,压缩后存储量可控制在 8~15 GB。
3. 核心字段详解
以下四个字段是 PSI 哨兵计算的核心输入,必须保证精度与完整性:
3.1 时间戳(Timestamp)
- 精度要求:毫秒级(ms)是底线,微秒级(μs)更优。
- 时区处理:统一存储为 UTC 时间,展示时再转换为本地时区。
- 对齐问题:不同数据源的时间戳可能存在 1~5ms 偏差,需在 ETL 阶段做时钟漂移校正。
3.2 价格(Price)
- 类型:浮点数,保留交易所最小变动单位(tick size)的精度。
- 异常值:零价格、负价格、超过前一笔 10% 的跳变需标记为可疑 Tick。
- 复权处理:若涉及除权除息,需使用向后复权价格保持连续性。
3.3 成交量(Volume)
- 单位:通常以基础货币(如 BTC、ETH)或合约张数为单位。
- 聚合风险:部分交易所将多笔小单合并为一条 Tick,需检查
trade_id连续性。 - 零量过滤:成交量为 0 的 Tick 通常为盘口刷新事件,应单独标记。
3.4 买卖盘口(Order Book Snapshot)
- 最优价差(Spread):
ask_px - bid_px,衡量市场流动性。 - 深度失衡(Depth Imbalance):
(bid_sz - ask_sz) / (bid_sz + ask_sz),反映短期买卖压力。 - 盘口斜率:结合第 2~5 档挂单量,计算价格-量能曲线的陡峭程度。
常见陷阱: 部分数据源将盘口字段填充为 0 表示无挂单,而非 NULL。直接使用 0 值计算价差会导致无穷大,必须在预处理阶段将 0 替换为 NaN 或进行插值。
4. Tick 数据流架构
下图展示高频 Tick 数据从交易所到 PSI 哨兵引擎的典型流转路径:
5. 常见字段的 PSI 映射关系
在坏账率 PSI 哨兵中,Tick 字段被映射为三类监控指标:
| Tick 字段 | PSI 监控指标 | 计算方式 | 预警阈值(示例) |
|---|---|---|---|
price |
价格分布 PSI | 将价格按 0.1% 分桶,对比参考分布 | PSI > 0.25 |
volume |
成交量分布 PSI | 按成交量对数分桶(0~10, 10~100, ...) | PSI > 0.20 |
bid_sz / ask_sz |
盘口深度失衡 PSI | 计算深度失衡比率,按 0.1 步长分桶 | PSI > 0.30 |
spread |
价差分布 PSI | 按价差绝对值分桶(0~0.01, 0.01~0.05, ...) | PSI > 0.35 |
实战要点: 价格 PSI 对市场微观结构变化最敏感,建议作为哨兵的首层监控。盘口深度 PSI 在流动性枯竭前 1~3 秒即出现显著漂移,是坏账率预警的前置指标。
6. Tick 数据质量校验清单
在将 Tick 数据送入 PSI 计算引擎前,必须通过以下质量门禁:
- 时间戳单调性:后一条 Tick 的
ts_event必须大于前一条,允许最大 1ms 回退(时钟抖动)。 - 价格合理性:价格在 [0.01 * 参考价, 10 * 参考价] 区间内,且不为 0。
- 盘口一致性:
bid_px < ask_px,若违反则标记为盘口交叉异常。 - 成交量非负:
volume >= 0,零量 Tick 单独标记但不丢弃。 - 字段完整性:核心字段(price, volume, bid_px, ask_px)不允许 NULL。
数据工程警告: 部分交易所的 Tick 数据存在“重复推送”现象(同一笔成交推送 2~3 次)。必须在采集层使用
(ts_event, trade_id, price, volume) 四元组做精确去重,否则 PSI 分布会被重复计数扭曲。
掌握 Tick 数据的定义、结构与字段含义后,下一环节将进入 Tick 数据预处理与特征工程,为 PSI 计算准备干净、对齐的输入分布。