2. 订单簿不平衡度:数学定义与直观理解

好,咱们进入正题。订单簿不平衡度,英文叫 Order Book Imbalance,简称 OBI。这东西说白了,就是衡量「买方和卖方谁更着急」的一个指标。

我刚开始做高频策略的时候,其实不太重视这个指标。总觉得价格才是王道,订单簿那些挂单都是虚的。直到有一次,我在回测一个均值回归策略时,发现信号总是在大单出现后失效。后来一查,原来是订单簿不平衡度已经提前发出了警告。嗯,从那以后,我就把 OBI 纳入了我的核心特征集。

2.1 数学定义

先看最基础的形式。假设在某个时刻 t,订单簿上有买一档的挂单量 V_bid,卖一档的挂单量 V_ask。那么最简单的 OBI 定义为:

OBI = (V_bid - V_ask) / (V_bid + V_ask)

这个值在 -1 到 1 之间波动。正数表示买方力量强,负数表示卖方力量强。0 表示两边势均力敌。

你想想看,如果买一档挂了 1000 手,卖一档只挂了 200 手,那 OBI 就是 (1000-200)/(1000+200) = 0.67。这说明买方明显更积极,价格大概率要往上走。

但这里有个坑。我在项目中遇到过,有些品种的买卖价差特别大,比如某些冷门币种。这时候只看第一档就不太靠谱了。所以我个人习惯用多档加权的方式:

OBI_weighted = (Σ w_i * V_bid_i - Σ w_i * V_ask_i) / (Σ w_i * V_bid_i + Σ w_i * V_ask_i)

其中 w_i 是第 i 档的权重,通常按距离当前价格的远近递减。比如第 1 档权重 1.0,第 2 档 0.8,第 3 档 0.6,以此类推。

核心要点: OBI 的本质是衡量订单簿两侧的「压力差」。正压力差 = 买方占优,负压力差 = 卖方占优。

2.2 直观理解

怎么理解这个指标?我打个比方。

想象一下菜市场。买一档就是那些举着钞票喊「我要买」的人,卖一档就是那些举着菜喊「我要卖」的人。如果买的人多、卖的人少,价格自然要涨。反过来,卖的人多、买的人少,价格就得跌。

OBI 就是把这个场景量化了。它告诉你:

  • OBI > 0.5:买方极度亢奋,价格可能快速拉升
  • OBI 在 0.2 ~ 0.5:买方占优,但不算极端
  • OBI 在 -0.2 ~ 0.2:市场比较均衡,方向不明
  • OBI 在 -0.5 ~ -0.2:卖方占优,偏空
  • OBI < -0.5:卖方恐慌性抛售,价格可能跳水

当然,这些阈值不是固定的。不同品种、不同时间尺度,阈值会有差异。我建议你拿到数据后先做一下分布统计,看看 OBI 在什么区间内信号最有效。

小技巧: 如果你发现 OBI 突然从 0.3 跳到 0.8,但价格没怎么动,这往往意味着有大单在悄悄吃货。这时候跟进,胜率很高。

2.3 多档位扩展

刚才说了,只看第一档有时候不够。我一般会看前 5 档甚至前 10 档。为什么呢?

举个例子。假设买一档只有 100 手,但买二档到买五档加起来有 5000 手。这说明什么?说明买方在下面筑了一道厚墙。价格就算跌破了买一档,也很难继续往下砸。这时候只看第一档 OBI 可能是负的,但实际市场并不弱。

所以,我常用的一个变体是「累积不平衡度」:

OBI_cumulative = (Σ V_bid_i - Σ V_ask_i) / (Σ V_bid_i + Σ V_ask_i)

这里的 i 从 1 到 N,N 是你选择的档位数。我个人习惯用 N=5,因为再往后的档位流动性太差,噪音太大。

档位数 适用场景 优缺点
1 档 高频交易,毫秒级 反应快,但容易被虚假挂单欺骗
3 档 中高频,秒级 平衡了速度和准确性
5 档 日内交易,分钟级 稳定性好,但有一定延迟
10 档 低频策略,小时级 噪音最小,但信号滞后明显

注意: 有些交易所会显示「冰山订单」,即只显示一部分挂单量。这时候你看到的订单簿是不完整的。我曾经因为这个吃过亏,回测时 OBI 信号很漂亮,实盘一跑就崩。后来加了冰山订单检测逻辑才稳住。

2.4 时间维度上的平滑

订单簿数据变化极快。一秒钟可能更新几百次。如果直接用原始 OBI 做信号,噪音会非常大。

我建议做一下平滑处理。最简单的就是用移动平均:

OBI_smooth(t) = α * OBI(t) + (1-α) * OBI_smooth(t-1)

α 是平滑系数,一般取 0.1 ~ 0.3。α 越小,平滑效果越强,但信号也越滞后。

还有一种做法是取一段时间内的中位数。比如过去 10 个 tick 的 OBI 中位数。这样能有效剔除极端值。

我个人更倾向于用指数加权移动平均(EWMA),因为它对近期数据更敏感,同时又能过滤掉高频噪音。

2.5 知识体系总览

下面这张图总结了 OBI 的核心逻辑和扩展方向:

订单簿不平衡度(OBI)知识体系 核心定义 OBI = (V_bid - V_ask) / (V_bid + V_ask) 多档位扩展 加权不平衡度 时间平滑 前N档累积量 距离加权 EWMA / 中位数 应用:价格方向预测 / 信号过滤 / 风险控制

从这张图可以看出来,OBI 虽然定义简单,但扩展空间很大。你可以根据不同的交易频率和品种特性,选择合适的变体。

2.6 实战中的注意事项

最后,分享几个我在实战中踩过的坑:

  • 虚假挂单:有些做市商会挂大单诱导散户,然后瞬间撤单。这时候 OBI 会突然变大,但价格并不动。我一般会结合「挂单存活时间」来过滤,比如只统计那些挂了超过 100 毫秒的订单。
  • 数据对齐:买一档和卖一档的数据不是同时更新的。如果你拿到的数据有 1 毫秒的时间差,计算出的 OBI 可能完全失真。建议用同一时间戳的快照数据。
  • 极端行情:在闪崩或暴涨时,订单簿会瞬间被吃掉好几档。这时候 OBI 会剧烈波动。我建议在极端行情下暂停使用 OBI 信号,或者加一个波动率过滤器。

一句话总结: OBI 是个好指标,但别迷信它。它告诉你的是「当前谁在主导」,而不是「未来一定会怎样」。结合其他特征一起用,效果会好很多。

好了,关于 OBI 的定义和直观理解就讲到这里。下一节我们会深入代码实现,看看怎么从原始订单簿数据中高效计算 OBI,以及如何用它构建交易信号。


公众号:蓝海资料掘金营,微信deep3321