L2 行情统一:tick/L1/L2/bar 四级能力与冲击成本
早期的行情叙事到“tick 和 1 分钟 K 线”就停了(见 05 行情接入与入库)。
但一旦要做期权做市、价差套利和执行算法,就绕不开盘口——没有五档深度,冲击成本只能靠拍脑袋,大单能不能成交全凭运气。
结论先行:EasyQuant 把行情能力升到 tick / L1 / L2 / bar 四级,每个数据源显式声明自己能提供哪几级(feedLevels),L2 盘口用来做 walk-the-book 冲击成本估算,让“这笔大单要多花多少”变成可算的数。
一、为什么 tick + 1m 不够
- 执行:切片下单要知道每一档还剩多少量,才知道吃到第几档、滑多少点
- 期权/做市:报价与对冲依赖买卖盘口,不是最新成交价
- 冲击成本:大单沿盘口“吃单”(walk-the-book)才是真实成本,L1 单档估不出来
所以行情要分层,而且要让上层知道“当前这个源到底给到哪一级”。
二、四级能力与显式声明
| 级别 | 含义 |
|---|---|
| tick | 逐笔成交 |
| L1 | 最优买卖一档 |
| L2 | 多档盘口深度快照 |
| bar | 聚合 K 线(1m 及以上) |
关键是能力声明:MarketDataChannel 让每个数据源声明自己的 feedLevels,上层据此决定“能不能做依赖 L2 的功能”。有些 期货/期权盘中给 L2,某些源只有 L1——系统不假设、按声明来,能力缺失时优雅降级而不是静默出错。
三、存储分层:latest 与 history
盘口数据量大,存储要分开对待:
- latest 层:最新盘口/报价供实时读取(
MarketQuoteService收口,热数据走 Redis) - history 层:L2 快照选择性采集进 hypertable,用于回放与冲击成本校准,而不是全量长期留存
BookSnapshotConsumer:消费盘口快照写入的通道
分层的意义是“实时要快、历史要省”,避免为了留历史把实时读也拖慢。
四、验证靶:walk-the-book 冲击成本
四级能力不是为了好看,验证它的是一个具体问题——一笔大单的冲击成本:
ImpactCostEstimator用 L2 盘口逐档累加,估算“吃掉这笔量”要滑多少点- 这个估算直接喂给执行算法(见 29 执行算法)与期货涨跌停撞板判断(见 26 期货换月与涨跌停)
能不能算准冲击成本,是检验行情层到底“升级了没有”的硬指标。
结语
行情从“有没有价”升级到“有没有盘口”,是能不能做执行、做市和套利的分水岭。
把行情统一成四级能力、按源声明、分层存储,并用 walk-the-book 冲击成本作为验证靶,EasyQuant 把行情层从“喂 K 线”推进到支撑微观结构决策的机构级底座。