halo 的技术博客

返回

问题:盘口第一档之外的九档,到底有没有信息#

盘口不平衡(order book imbalance)是微观结构里最经典的短期方向信号:买一量远大于卖一量,下一笔价格变动大概率向上。这个信号人尽皆知,也因此衰减得厉害。

自然的追问是:第一档之外的挂单有没有增量信息? 十档行情摆在那里,大部分人只用了第一行。

一个优雅的观察角度是把订单簿看成一个形状而不是几个数字。大量实证研究发现,限价订单簿的挂单量随档位深度大致按指数衰减:

Q(k)AeκkQ(k) \approx A \cdot e^{-\kappa k}

其中 kk 是距最优价的档位数,κ\kappa 是衰减斜率。斜率小 = 深档挂单还很厚 = 这一侧的耐心资金多。于是方向信号可以定义为买卖两侧斜率之差:卖盘衰减快(κa\kappa_a 大)而买盘衰减慢(κb\kappa_b 小),意味着买方队伍深、卖方队伍浅,价格倾向上行。

这个信号比一档不平衡好在哪?它用了十档的全部形状信息,且对单档的噪声(一笔大单挂上又撤掉)天然钝感——OLS 拟合斜率相当于对十档做了加权平均。本文用受控模拟把它和两个经典对照掰一掰手腕,然后算一笔大多数论文不爱算的账:交易成本。

实验设计:把压力变量埋进盘口形状#

模拟 60000 个盘口快照(5 秒一张,约一个月)。核心是一个潜在压力变量 xtx_t(AR(1),自相关 0.995,对应约 2 分钟半衰期的压力持续性),它同时驱动两件事:

  1. 盘口形状κb=κ0eβx\kappa_b = \kappa_0 e^{-\beta x}κa=κ0e+βx\kappa_a = \kappa_0 e^{+\beta x}——买压大时买盘衰减慢、卖盘衰减快;
  2. 未来价格:下一快照 mid 收益的漂移项 x\propto x

每档挂单量再乘上对数正态噪声(σ=0.35),模拟真实盘口的脏数据:

两种压力状态下的盘口长这样:

两种压力状态下的盘口形状

左图买压状态:绿色买盘从 B1 到 B10 衰减平缓,红色卖盘迅速变薄;右图反之。关键在于这个不对称分布在全部十档上——只看第一档,你只采样了形状的一个点。

信号构造:对 log 深度做 OLS#

对每张快照,把十档挂单量取对数,对档位序号回归,斜率的相反数就是 κ^\hat\kappa。全部快照可以向量化一次算完:

def slope_est(Q):
    """log Q_k = a - kappa*k 的 OLS 斜率,向量化处理全部快照"""
    lq = np.log(Q)                     # (T, L)
    k = kgrid - kgrid.mean()           # 中心化的档位序号
    return -(lq @ k) / (k @ k)         # (T,)

kb_hat = slope_est(Qb)
ka_hat = slope_est(Qa)
slope_sig = ka_hat - kb_hat            # >0: 卖盘衰减快 -> 看涨
python

两个对照信号,都是文献里的常客:

# 对照1:一档不平衡(经典 OBI)
imb1 = (Qb[:, 0] - Qa[:, 0]) / (Qb[:, 0] + Qa[:, 0])
# 对照2:五档总量不平衡
d5b, d5a = Qb[:, :5].sum(1), Qa[:, :5].sum(1)
imb5 = (d5b - d5a) / (d5b + d5a)
python

结果一:斜率信号全面压过两个对照#

三个信号对未来 mid 收益的 IC,预测步长从 1 快照(5 秒)扫到 160 快照(约 13 分钟):

三种盘口信号的预测 IC

信号IC @1 快照IC @20 快照IC @160 快照
斜率差(10 档)1.62%5.44%10.72%
一档不平衡0.20%1.13%2.13%
五档量不平衡1.04%4.34%8.17%

三个观察:

第一,斜率信号在每个视界上都是第一名。 20 快照视界 IC 5.44%,是一档不平衡的近 5 倍。一档不平衡惨败的原因在模拟设定里看得很清楚:单档挂单量乘了 σ=0.35 的对数正态噪声,一个点的信噪比天然低;斜率估计用十个点做回归,噪声被平均掉了大半。这正是真实盘口的写照——第一档是撤单博弈最激烈、噪声最大的档位。

第二,五档总量不平衡追得很近(4.34% vs 5.44%),说明大部分增量信息来自「用了更多档」,小部分来自「用了形状」。 如果你的行情源只有五档,简单的量不平衡已经能吃到八成效果;斜率参数化的额外好处是输出一个有物理含义、跨股票可比的量纲(κ\kappa 不受挂单量绝对水平影响)。

第三,IC 随视界拉长而上升,这不是信号「越放越香」,而是压力变量半衰期约 2 分钟——比 5 秒长得多,信号对累计收益的预测自然随视界增长,直到压力本身衰减为止。160 快照(13 分钟)已接近这个上限。

十分位单调性检查(100 秒视界):

信号分位 vs 未来收益

斜率信号从 D1 到 D10 干净单调,首尾分位差约 3bp / 100 秒。看起来很美——直到你想用 taker 单去吃它。

结果二:毛信号 0.2bp,半价差 2.5bp#

策略:信号 z 值超过 ±1 时建立方向仓位,持有 20 快照,每次仓位变化支付一次单边成本。扫描成本从 0 到 6bp:

成本现实检验

信号每笔毛收益盈亏平衡成本
斜率差(10 档)0.20 bp1.0 bp
五档量不平衡0.17 bp0.5 bp
一档不平衡0.03 bp0.25 bp

而这只 20 元股票、1 分钱最小报价单位的半价差就是 2.5bp——是斜率信号盈亏平衡成本的 2.5 倍,是每笔毛收益的 12 倍。

结论冷酷但必须直说:IC 5.44%、十分位完美单调的信号,用市价单交易在 100 秒视界上是结构性亏损的。 不是执行不够好,不是参数没调优——是毛信号量级(零点几个 bp)和过路费量级(几个 bp)差了一个数量级。这就是微观结构信号的普遍宿命:预测力是真的,可交易性是假的。

那这类信号的价值在哪?三个真实用途:

  1. Maker 侧的挂单决策。 做市商不付价差、赚价差。斜率信号告诉你哪一侧该挂得激进、哪一侧该退后一档——它不需要跨越价差,只需要在你反正要挂单的前提下优化位置。0.2bp 的边际改善乘以巨大的成交量,就是做市利润的重要来源。
  2. 执行算法的时机微调。 母单要在 30 分钟内买完 10 万股,切片的下单时机可以参考斜率信号:信号看涨时提前吃、看跌时多等等。信号不产生 alpha,它减少实现差价(implementation shortfall)
  3. 和慢信号叠加改变激进度。 日频策略今天反正要买入某只股票,微观信号决定这一单用 taker 还是 maker、现在下还是等五分钟。信号的价值通过「省下的成本」变现,而不是通过独立回转交易。

一个容易忽略的估计细节:对数回归的加权问题#

logQk\log Q_k 做 OLS 隐含假设各档的对数噪声同方差。真实盘口远端档位挂单量小、相对噪声大,且可能出现零挂单(log 直接爆炸)。工程上的处理:

lq = np.log(np.maximum(Q, 1.0))        # 下限保护,1 手起
w = np.sqrt(np.arange(L, 0, -1))       # 近档加权:噪声小的档位权重大
# 加权 OLS:k、lq 先乘 sqrt(w) 再回归
python

另一个方案是干脆放弃参数化,用深度加权平均档位(每一侧挂单量的质心)代替斜率——质心对分布形状的假设更弱,对零挂单档位也稳健。模拟中两者高度相关(这里形状真是指数),但真实盘口在整数价位、大单支撑位附近有挂单尖峰,指数假设会被破坏,质心版本往往更稳。

已知偏差#

按老规矩,把模拟与真实的差距摆在明处:

  1. 没有撤单博弈和幌骗(spoofing)。 模拟的挂单噪声是无恶意的对数正态;真实盘口的深档大单可能是从不打算成交的幌单,斜率信号恰好是幌骗者最想操纵的统计量。实盘使用需要配合挂单存活时间过滤(只统计挂龄超过若干百毫秒的量)。
  2. 5 秒快照抹掉了事件序列。 快照之间的挂撤单顺序、成交侵蚀速度都是信息,事件驱动(event-by-event)的处理能提取更多,但工程成本完全不同。
  3. 压力变量直接驱动价格漂移,等于假设「盘口形状与未来收益的相关」这个命题为真。模拟能回答的是「如果形状有信息,斜率估计比一档不平衡多提取多少」,不能回答「真实市场的形状有没有信息」——后者只能拿真实 L2 数据验证,且答案随市场、随年份漂移。

结论#

三句话带走:

  1. 盘口深档有真实增量信息,参数化成斜率是提取它的稳健方式——20 快照 IC 从一档的 1.13% 升到 5.44%,噪声平均是主要功臣,五档总量不平衡能吃到八成效果。
  2. 预测力 ≠ 可交易性。 每笔毛收益 0.2bp 对半价差 2.5bp,taker 策略无解。评估任何微观结构信号,先把毛收益和价差放在同一张表里,再决定要不要继续。
  3. 这类信号的正确变现渠道是执行层:maker 挂单位置、母单切片时机、慢信号的激进度调节。它省成本,不赚 alpha——把它放对位置,0.2bp 也是钱;放错位置,5.44% 的 IC 也是亏损。

订单簿是市场上最贵的免费数据:人人都收得到十档行情,但从第一档之外读出信息、并且诚实计算这信息值几个 bp 的人,永远是少数。

订单簿斜率信号:用挂单密度预测短期价格方向
https://blog.halo26812.eu.org/blog/order-imbalance-slope-signal
Author halo
Published at 2026年7月31日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨