4. 高频行情数据特征分析
高频行情压缩不是先选算法,而是先看清数据本身“长什么样”。同一套 LZ4、ZSTD 或差分编码,用在逐笔委托流和快照流上,压缩率可能相差数倍。本节从四个维度建立特征分析框架:数据冗余类型、时间序列相关性、价格档位重复性、订单簿变化模式,并给出压缩潜力评估方法。
一、核心原理:四类冗余决定压缩上限
信息论告诉我们,压缩率的上限由数据的熵决定。高频行情中可被利用的冗余主要有四类:
- 结构冗余:字段固定、类型固定,如交易所代码、证券代码、买卖方向枚举,重复出现且取值空间小。
- 时间冗余:相邻 tick 之间时间戳递增、价格微变、数量小幅波动,差分后数值显著变小。
- 空间冗余:同一时刻多档买卖盘价格连续、数量分布有规律,档位间存在强相关。
- 语义冗余:订单簿变化往往只影响少数档位,大部分档位在相邻快照间保持不变。
压缩潜力 = 可消除冗余量 / 原始数据量。结构冗余靠字典编码,时间冗余靠差分与变长整数,空间冗余靠档位建模,语义冗余靠增量与位图。
二、时间序列相关性:差分与游程的用武之地
逐笔行情的时间戳通常以微秒或纳秒计,相邻记录间隔稳定但非恒定。直接存储 8 字节整数浪费严重,差分后多数落在几十到几千微秒区间,用 varint 编码可压到 1~2 字节。价格字段同理:A 股价格最小变动单位 0.01 元,相邻成交价差常为 0 或 ±1 个 tick。
原始时间戳序列(us):
1699999999123456
1699999999123501
1699999999123548
1699999999123602
一阶差分:
45, 47, 54
varint 编码后约 3 字节,原始 32 字节,压缩比 ≈ 10:1
更关键的是游程特征:买卖方向、订单类型等枚举字段常出现连续相同值。例如连续 20 笔都是“买、限价”,用 RLE 只需记录“买限价×20”。评估时应统计各字段的游程长度分布,游程越长,RLE 收益越高。
三、价格档位重复性与订单簿变化模式
快照数据通常包含买卖各 5~10 档。相邻快照间,价格档位大量重复,只有少数档位发生增删改。以某股票 Level-2 快照为例:
| 变化类型 | 典型占比 | 可压缩手段 |
|---|---|---|
| 档位价格完全不变 | 60%~80% | 位图标记 + 跳过 |
| 仅数量变化 | 10%~25% | 数量差分 + varint |
| 档位新增/删除 | 5%~15% | 增量记录 + 档位索引 |
| 价格整体平移 | 低频但集中 | 基准价 + 偏移量 |
订单簿变化模式可归纳为三种:稳态(仅数量微调)、迁移态(价格档位整体移动)、突变态(涨跌停或大单冲击)。稳态适合增量编码,迁移态适合基准价加偏移,突变态则需保留完整快照作为锚点。
四、压缩潜力评估方法与实战误区
评估流程建议按以下步骤执行:
- 采样:选取连续 1 个交易日的逐笔与快照数据,覆盖开盘、盘中、收盘三个阶段。
- 字段级统计:计算各字段的取值分布、游程长度、差分绝对值分布。
- 冗余量化:分别估算结构、时间、空间、语义冗余的可消除字节数。
- 试压:用候选算法(差分+varint、RLE、字典编码、ZSTD)实际压缩,对比压缩率与解压耗时。
- 决策:在压缩率、CPU 开销、随机读取能力之间取平衡。
评估时务必区分“可压缩”与“值得压缩”。某些字段压缩率很高但访问频率极低,过度编码反而增加解压复杂度。优先压缩高频访问且冗余大的字段。
常见误区一:只看整体压缩比,忽略分字段差异。误区二:用开盘集合竞价数据评估全天,开盘波动大、冗余低,会低估压缩潜力。误区三:忽略解压后的顺序一致性,增量编码若丢失锚点会导致订单簿重建错误。
复盘时建议建立一张“字段—冗余类型—编码策略—压缩比—解压耗时”对照表,每次行情源升级或市场规则变化后重新评估。只有把数据特征分析做扎实,后续的压缩编码与存储优化才有可靠依据。