7、订单簿不平衡:买卖盘口不平衡指标、订单簿斜率、预测短期价格方向
做量化交易这些年,我越来越觉得订单簿是个宝藏。它不像K线那样藏着掖着,而是把市场参与者的真实意图摆在你面前。说白了,订单簿就是多空双方的交火前线。
今天我们来聊聊订单簿不平衡。这个概念听起来高大上,其实核心就一句话:买卖力量谁更强。我刚开始研究这个指标时,以为就是简单数数买单多还是卖单多。后来发现,事情远没那么简单。
买卖盘口不平衡指标
先看最基础的指标——盘口不平衡度。它的计算公式很直观:
盘口不平衡 = (买单总量 - 卖单总量) / (买单总量 + 卖单总量)
这个值在-1到1之间波动。正值表示买方强势,负值表示卖方强势。嗯,这里要注意:只看第一档是不够的。
我在实盘中发现,有些做市商喜欢在买一挂大单,但买二到买五却空空如也。这种虚假支撑,我吃过亏。后来我改用加权不平衡指标,给不同档位赋予不同权重:
def weighted_imbalance(order_book, depth=5):
"""
加权盘口不平衡计算
越靠近最优价,权重越大
"""
bids = order_book['bids'][:depth] # 买单
asks = order_book['asks'][:depth] # 卖单
bid_volume = sum([v * (depth - i) for i, (p, v) in enumerate(bids)])
ask_volume = sum([v * (depth - i) for i, (p, v) in enumerate(asks)])
if bid_volume + ask_volume == 0:
return 0
return (bid_volume - ask_volume) / (bid_volume + ask_volume)
订单簿斜率:判断市场陡峭度
不平衡指标告诉你方向,但没告诉你力度。这时候就需要订单簿斜率了。
斜率衡量的是订单簿的陡峭程度。如果买单从买一到买五快速减少,说明买方很急,愿意追高。反之,如果买单分布很均匀,说明买方不慌不忙。
计算方式其实很简单:
def orderbook_slope(order_book, depth=10):
"""
计算订单簿斜率
返回 (买斜率, 卖斜率)
"""
bids = order_book['bids'][:depth]
asks = order_book['asks'][:depth]
# 买斜率:价格越低,量越大(负相关)
bid_prices = [p for p, v in bids]
bid_volumes = [v for p, v in bids]
if len(bid_prices) < 2:
return 0, 0
# 用线性回归拟合斜率
from numpy import polyfit
bid_slope = polyfit(bid_prices, bid_volumes, 1)[0]
ask_slope = polyfit(ask_prices, ask_volumes, 1)[0]
return bid_slope, ask_slope
预测短期价格方向
好了,指标有了,怎么用?我总结了一套三层验证法:
- 第一层:不平衡方向 - 看加权不平衡指标的正负
- 第二层:斜率确认 - 看买卖斜率是否支持不平衡方向
- 第三层:量价配合 - 看最近1分钟的成交量是否放大
举个例子。假设当前BTC价格在30000:
| 指标 | 数值 | 信号 |
|---|---|---|
| 加权不平衡 | +0.35 | 买方占优 |
| 买斜率 | -0.8 | 买方分布陡峭(急迫) |
| 卖斜率 | +0.2 | 卖方分布平缓(不慌) |
| 1分钟成交量 | 较前5分钟均值+40% | 量能配合 |
三个信号都指向上涨,这时候我会考虑做多。但注意,这不是100%的胜率。市场总有意外。
核心逻辑:订单簿不平衡 + 斜率 + 成交量 = 短期方向预测的黄金组合。单一指标容易骗线,三个指标共振时胜率最高。
我个人习惯把这三个指标合成一个综合得分:
def composite_score(imbalance, bid_slope, ask_slope, volume_ratio):
"""
综合评分,范围-3到3
正值看多,负值看空
"""
score = 0
# 不平衡贡献
if imbalance > 0.2:
score += 1
elif imbalance < -0.2:
score -= 1
# 斜率贡献
if bid_slope < -0.5 and ask_slope > -0.3:
score += 1 # 买方急,卖方不急
elif ask_slope > 0.5 and bid_slope < 0.3:
score -= 1 # 卖方急,买方不急
# 成交量贡献
if volume_ratio > 1.3:
score += 1 if imbalance > 0 else -1
return score
你想想看,这个综合得分其实就是在模拟一个老交易员的直觉。我刚开始做高频时,就是靠这套逻辑手工盯盘。后来写成自动化策略,回测效果还不错。
不过要提醒一句:订单簿数据更新极快,毫秒级的变化都可能改变信号。如果你做的是分钟级交易,建议用1秒或5秒的快照做平滑处理。我曾经因为直接用tick数据,结果信号频繁翻转,差点把服务器搞崩。
最后分享一个实战技巧:关注大单的撤单行为。有时候你会看到买一突然出现一个超级大单,但3秒后又消失了。这种「幽灵单」通常是做市商在测试市场深度。如果撤单后价格没有明显下跌,说明真实买盘很强,可以跟进。
嗯,订单簿不平衡这块内容就这些。记住,指标是死的,市场是活的。多复盘、多总结,你也能找到适合自己的用法。