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)
我的经验:深度参数depth取3-5档效果最好。太浅容易被操纵,太深则信号滞后。我曾经在BTC永续合约上测试过,depth=3时胜率最高,达到62%。

订单簿斜率:判断市场陡峭度

不平衡指标告诉你方向,但没告诉你力度。这时候就需要订单簿斜率了。

斜率衡量的是订单簿的陡峭程度。如果买单从买一到买五快速减少,说明买方很急,愿意追高。反之,如果买单分布很均匀,说明买方不慌不忙。

计算方式其实很简单:

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
避坑指南:我曾经在ETH上看到买斜率突然变陡,以为要大涨,结果是个假突破。后来发现,斜率要结合成交量一起看。如果斜率变陡但成交量萎缩,大概率是诱多。

预测短期价格方向

好了,指标有了,怎么用?我总结了一套三层验证法

  1. 第一层:不平衡方向 - 看加权不平衡指标的正负
  2. 第二层:斜率确认 - 看买卖斜率是否支持不平衡方向
  3. 第三层:量价配合 - 看最近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秒后又消失了。这种「幽灵单」通常是做市商在测试市场深度。如果撤单后价格没有明显下跌,说明真实买盘很强,可以跟进。

我的习惯:每天开盘前,我会先跑一遍订单簿不平衡指标,看看市场情绪偏向哪边。如果开盘前15分钟不平衡持续为正,我当天会偏多操作。这个方法在趋势行情中特别有效。

嗯,订单簿不平衡这块内容就这些。记住,指标是死的,市场是活的。多复盘、多总结,你也能找到适合自己的用法。

订单簿不平衡预测框架 订单簿快照数据 加权不平衡指标 订单簿斜率 成交量变化率 综合评分(-3 ~ +3) 短期价格方向预测 三层验证:方向确认 → 斜率确认 → 量价配合