高频行情数据基础:Tick级数据、Level2行情、数据频率与存储格式

高频行情是量化风控哨兵系统的“第一滴血”。在坏账率 PSI 监控中,数据颗粒度越细,漂移发现越早。本章从 Tick 级数据出发,厘清 Level2 行情结构、数据频率层级与存储选型,为后续 PSI 计算打下坚实的数据基础。

2.1 Tick级数据:最小时间切片

Tick 是交易所对外发布的最小行情快照单元。在 A 股市场,每笔 Tick 包含以下核心字段:

字段含义示例值
Time交易所撮合时间(毫秒级)09:30:01.250
LastPrice最新成交价15.68
Volume当前 Tick 成交量(股)1200
Turnover当前 Tick 成交额(元)18816.00
BidPrice1 / AskPrice1买一 / 卖一价15.67 / 15.69
BidVol1 / AskVol1买一 / 卖一挂单量5800 / 3200
风控视角: Tick 级数据能捕捉到毫秒级的流动性突变。例如,买一挂单量在 3 个 Tick 内从 5000 股骤降至 200 股,往往是机构撤单或大单出逃的前兆,PSI 哨兵应在此刻触发高频漂移预警。

2.2 Level2 行情:从快照到逐笔

Level2 行情相比基础 Level1 增加了逐笔成交、逐笔委托和十档盘口。以下是两者的关键差异:

维度Level1(基础行情)Level2(深度行情)
快照频率3 秒一次3 秒一次(含更多档位)
盘口深度5 档买卖10 档买卖
逐笔成交无有(每笔成交明细)
逐笔委托无有(委托进入与撤单)
总买卖队列无有(前 50 笔挂单明细)

逐笔成交数据是 PSI 计算中“真实成交分布”的最佳来源。通过逐笔数据,可以精确统计每个价格区间的成交量占比,而非依赖快照插值。

实战要点: Level2 逐笔委托中的“撤单”行为是坏账率先行指标。如果某只股票在连续 10 个 Tick 内撤单量超过委托量的 60%,说明市场参与者对该价格区间缺乏共识,PSI 漂移概率显著上升。

2.3 数据频率层级与选择策略

高频行情数据按时间粒度可分为四个层级,不同风控场景应选择不同频率:

  1. Tick 级(毫秒级) — 用于逐笔成交分析、微观结构建模、瞬时流动性监测。数据量最大,单只股票日均约 4000~8000 条 Tick。
  2. 秒级(1s / 3s) — 用于高频因子计算、快照对齐。Level2 快照默认 3 秒一次,适合计算短期波动率。
  3. 分钟级(1min / 5min) — 用于 PSI 常规监控、坏账率日间对比。平衡精度与存储成本。
  4. 日级 — 用于回测、归因分析、报表输出。数据量最小,但无法捕捉日内漂移。
避坑提示: 不要对所有股票统一使用 Tick 级数据。对于日均成交额低于 5000 万元的冷门股,Tick 级数据稀疏且噪声大,建议降采样至 1 分钟频率后再计算 PSI,否则会因零值过多导致指标失真。

2.4 存储格式选型:速度与压缩的平衡

高频行情数据具有“写多读少、时序性强、单条体积小”的特点。以下是三种主流存储格式的对比:

格式压缩比写入速度查询性能(时间范围)适用场景
Parquet高(5~10x)中等快(列式剪枝)离线批处理、日级回测
Arrow IPC低(1~2x)极快极快(内存零拷贝)实时流计算、Tick 级缓存
CSV无慢慢(全表扫描)仅用于调试或小样本导出

在哨兵系统中,推荐采用 分层存储策略:

  • 热层(近 7 天):使用 Arrow IPC 格式,内存映射文件,支持毫秒级查询。
  • 温层(7~90 天):使用 Parquet 格式,按日期分区,配合列式存储加速 PSI 计算。
  • 冷层(90 天以上):使用 Parquet + Zstd 压缩,归档至对象存储,保留原始 Tick 数据用于重算。
# 示例:使用 PyArrow 将 Tick 数据写入 IPC 格式(热层)
import pyarrow as pa
import pyarrow.ipc as ipc

table = pa.table({
    "time": ["09:30:01.250", "09:30:01.350"],
    "last_price": [15.68, 15.69],
    "volume": [1200, 800],
    "bid_vol1": [5800, 5600],
    "ask_vol1": [3200, 3100]
})

with ipc.new_file("tick_hot_20250220.arrow", table.schema) as writer:
    writer.write_table(table)

2.5 高频行情数据流架构

下图展示了从交易所到 PSI 哨兵计算引擎的完整数据流,重点标注了 Tick 级数据的采集、缓存与降采样路径:

高频行情数据流架构(Tick → PSI 哨兵) 交易所行情网关 Level2 订阅服务 Tick 热缓存 (Arrow) 降采样引擎 (1min/5min) Parquet 温层存储 PSI 哨兵计算引擎 漂移告警 / 仪表盘 说明:Tick 数据先进入 Arrow 热缓存供实时计算,同时异步写入 Parquet 温层;降采样引擎从热缓存拉取数据生成分钟级快照,供 PSI 引擎使用。

2.6 数据质量校验:Tick 级 PSI 的前置条件

在将高频行情送入 PSI 计算之前,必须通过以下质量检查,否则计算结果毫无意义:

检查项阈值处理方式
Tick 时间戳单调递增不允许回退丢弃乱序 Tick 并记录日志
LastPrice 非负且非零价格 > 0标记为脏数据,不参与 PSI 统计
Volume 非负成交量 ≥ 0负值直接置零并告警
BidPrice1 ≤ AskPrice1必须成立若违反,取前一个有效 Tick 的价差插值
日间 Tick 数量范围[1000, 20000]超出范围说明数据源异常,触发人工核查
哨兵最佳实践: 在 Tick 数据入库阶段即嵌入质量校验逻辑,使用 Apache Arrow 的 filter 和 take 操作快速剔除脏数据,避免 PSI 计算时重复清洗。建议将校验结果写入单独的监控表,用于评估数据源健康度。