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 线”推进到支撑微观结构决策的机构级底座。