4. 订单簿不平衡:定义、计算方法与市场影响
各位同学,今天我们来聊聊一个我每天盯盘时都会关注的核心指标——订单簿不平衡(Order Book Imbalance, OBI)。
说白了,它就是衡量买卖双方力量对比的一把尺子。你想想看,一个订单簿里,买单和卖单永远在博弈。谁的力量更强,价格就往哪边倾斜。这个道理很朴素,但真正把它量化成可交易的信号,里面有不少门道。
4.1 什么是订单簿不平衡?
定义其实很简单:订单簿不平衡 = (买单总深度 - 卖单总深度) / (买单总深度 + 卖单总深度)
这个值在 -1 到 1 之间波动。正值表示买方力量更强,负值表示卖方占优。0 表示买卖双方势均力敌。
我在项目中遇到过这样一个场景:有一次做高频回测,我发现单纯看价格涨跌信号,胜率只有 52% 左右。但当我加入 OBI 作为过滤条件后,胜率直接跳到了 63%。为什么?因为 OBI 能提前捕捉到订单流的不平衡,而价格反应往往滞后几毫秒。
核心要点:订单簿不平衡是市场微观结构的「温度计」。它告诉你,当前这个价位上,谁在真正用力。
4.2 计算方法:从浅到深
计算 OBI 的方法有很多种,我习惯从简单到复杂逐步递进。下面是我常用的几种方式:
4.2.1 基础版:单层 OBI
只看买一和卖一的价格与数量。这是最原始的方法,计算快,但信息量有限。
def basic_obi(bid_vol, ask_vol):
"""
基础版 OBI
bid_vol: 买一挂单量
ask_vol: 卖一挂单量
"""
if bid_vol + ask_vol == 0:
return 0
return (bid_vol - ask_vol) / (bid_vol + ask_vol)
嗯,这里要注意:如果买卖一挂单量都很小,这个指标会非常敏感,容易产生假信号。我曾经因为这个吃过亏——有一次看到 OBI 突然跳到 0.8,以为要大涨,结果只是一个大户撤单又重挂,虚惊一场。
4.2.2 进阶版:多层加权 OBI
我个人更推荐用多层数据。把前 5 档或前 10 档的挂单量都考虑进来,并且给不同档位赋予不同权重。越靠近最优价,权重越高。
def weighted_obi(bids, asks, levels=5, decay=0.8):
"""
加权 OBI
bids: 买单列表 [(price, volume), ...]
asks: 卖单列表 [(price, volume), ...]
levels: 考虑的档位数
decay: 权重衰减因子
"""
total_bid = 0
total_ask = 0
for i in range(levels):
weight = decay ** i # 越远权重越小
if i < len(bids):
total_bid += bids[i][1] * weight
if i < len(asks):
total_ask += asks[i][1] * weight
if total_bid + total_ask == 0:
return 0
return (total_bid - total_ask) / (total_bid + total_ask)
我的经验:decay 参数我一般设在 0.7-0.9 之间。太大会让远档位权重过高,反应迟钝;太小又跟单层没区别。你可以根据品种的流动性来调——流动性好的品种,decay 可以大一点。
4.2.3 高级版:价格加权 OBI
还有一种思路,是把价格也考虑进去。毕竟,同样 100 手的买单,挂在买一和挂在买五,意义完全不同。
def price_weighted_obi(bids, asks, mid_price, levels=5):
"""
价格加权 OBI
mid_price: 当前中间价
"""
total_bid = 0
total_ask = 0
for i in range(levels):
if i < len(bids):
price_ratio = (mid_price - bids[i][0]) / mid_price
total_bid += bids[i][1] * (1 + price_ratio)
if i < len(asks):
price_ratio = (asks[i][0] - mid_price) / mid_price
total_ask += asks[i][1] * (1 + price_ratio)
if total_bid + total_ask == 0:
return 0
return (total_bid - total_ask) / (total_bid + total_ask)
4.3 市场影响:OBI 能告诉我们什么?
OBI 不是万能的,但它确实能揭示一些有意思的规律。我总结了几点:
| OBI 状态 | 市场含义 | 我的观察 |
|---|---|---|
| OBI > 0.6 | 买方极度强势 | 短期大概率上涨,但要警惕「虚假支撑」——大单可能只是做市商在护盘 |
| OBI < -0.6 | 卖方极度强势 | 下跌压力大,但有时是「恐慌性挂单」,实际成交意愿并不强 |
| OBI 在 -0.2 ~ 0.2 | 市场均衡 | 这时候我一般不做方向性交易,等信号明确再说 |
| OBI 快速翻转 | 多空力量突然变化 | 往往是重大消息或大单进场,值得重点关注 |
避坑指南:我曾经犯过一个错误——看到 OBI 持续为正就无脑做多。结果发现,有些大资金会故意在买盘挂大单制造「虚假繁荣」,然后悄悄在卖盘出货。所以,OBI 一定要结合成交量和价格走势一起看,别被表面数据骗了。
4.4 实战中的 OBI 策略思路
说了这么多理论,来点实际的。我常用的一个简单策略框架是这样的:
- 计算实时 OBI:用上面提到的加权方法,每 100ms 计算一次。
- 设定阈值:比如 OBI > 0.5 视为买方强势,OBI < -0.5 视为卖方强势。
- 结合价格动量:如果 OBI 强势且价格在上涨,确认信号;如果 OBI 强势但价格不动,警惕陷阱。
- 动态调整:不同时间段、不同市场环境下,阈值要跟着变。早盘和尾盘,OBI 的参考价值就不一样。
你想想看,这个策略的核心逻辑是什么?其实就是利用订单簿的「提前量」。价格还没动,但订单簿已经告诉你谁在蓄力了。
4.5 知识体系总览
为了让你更直观地理解本章内容,我画了一张图。它把订单簿不平衡的核心概念、计算方法和应用场景串在了一起:
这张图把 OBI 的脉络理清楚了。从定义出发,到三种计算方法,再到市场影响,最后落到实战策略。你写代码的时候,可以对照这张图来设计你的 OBI 模块。
一个小建议:刚开始做 OBI 策略时,别急着上复杂模型。先用基础版跑一段时间,观察它的表现。等你熟悉了它的脾气,再慢慢加多层加权、价格加权这些花活。我当年就是这么过来的。
好了,关于订单簿不平衡,今天就聊这么多。记住,OBI 是一个工具,不是圣杯。它帮你看到市场的「力」,但最终怎么用这个力,还得靠你的判断。
公众号:蓝海资料掘金营,微信deep3321