4、买卖压力指标:从订单簿到价格冲击

好,咱们进入第四讲。前面几章我们聊了订单簿的基础结构、深度计算,还有流动性评估。今天要讲的,是真正能用来判断买卖力量对比的核心指标。

说白了,交易就是一场拔河。买方和卖方各自发力,谁的力量大,价格就往谁那边倾斜。那怎么量化这个力量?这就是我们今天要解决的三个问题。

4.1 订单簿不平衡(OBI)

先来个最简单的。订单簿不平衡,英文叫 Order Book Imbalance,简称 OBI。它的计算方式非常直观:

OBI = (买一量 - 卖一量) / (买一量 + 卖一量)

嗯,就这么简单。取值在 -1 到 1 之间。正数表示买方力量强,负数表示卖方占优。

我个人习惯,在实盘监控中,OBI 超过 0.3 我就开始警惕了。超过 0.5 基本意味着短期内有明显的买入冲动。

核心逻辑:OBI 只看第一档。它假设最靠近成交价的挂单,最能反映当下的博弈情绪。

但这里有个坑。我曾经在回测中发现,OBI 在流动性极好的品种上表现不错,但在一些冷门币种上,经常出现假信号。为什么?因为第一档的量可能被人为操纵——挂个大单吓唬人,然后秒撤。

注意:OBI 对盘口深度敏感。如果买卖一档的量都很小,OBI 的参考价值会大打折扣。

4.2 加权买卖压力(WOP)

既然只看第一档容易出问题,那咱们把视野放宽一点。加权买卖压力,Weighted Order Pressure,就是考虑了多档深度的改进版。

它的计算思路是这样的:

WOP = Σ (买档量 × 权重) - Σ (卖档量 × 权重)

权重怎么给?常见做法是按距离成交价的远近递减。比如:

  • 第一档权重 1.0
  • 第二档权重 0.8
  • 第三档权重 0.6
  • 第四档权重 0.4
  • 第五档权重 0.2

你想想看,这样是不是更合理?离成交价越近的挂单,越有成交可能,权重自然应该更高。

我的经验:在实际项目中,我通常取前 5 档或前 10 档。档位太少,信息不够;档位太多,噪音也大。5 档是个不错的平衡点。

加权买卖压力还有一个好处——它能捕捉到大单的分布。比如,虽然买一只有 10 个币,但买二到买五堆了 500 个币。这时候 WOP 会明显偏正,告诉你下面有支撑。

4.3 价格冲击模型(Kyle's Lambda)

好,前两个指标都是看静态的挂单力量。但交易是动态的。你下了一笔单子,价格会怎么动?这就引出了 Kyle's Lambda。

Kyle's Lambda 最早来自 Kyle 1985 年的经典论文。它衡量的是每单位成交量对价格的冲击程度。公式长这样:

ΔP = λ × Q + ε

其中:

  • ΔP 是价格变化
  • Q 是成交量(带方向,买入为正,卖出为负)
  • λ 就是 Kyle's Lambda,表示价格冲击系数
  • ε 是随机噪音

λ 越大,说明市场越脆弱——你稍微买一点,价格就蹭蹭往上涨。λ 越小,说明市场深度好,能吃下大单而不怎么波动。

实际应用:我在做高频策略时,会实时计算 λ 值。如果 λ 突然变大,说明流动性在恶化,我会降低下单频率,避免被滑点吃掉利润。

怎么算 λ?最直接的方法是用线性回归。拿过去 N 笔成交数据,把成交量作为自变量,价格变化作为因变量,拟合出来的斜率就是 λ。

import numpy as np

def kyles_lambda(trades, window=100):
    """
    trades: list of dict, 每笔包含 {'price': float, 'volume': float, 'side': 'buy'/'sell'}
    """
    prices = [t['price'] for t in trades[-window:]]
    volumes = [t['volume'] if t['side'] == 'buy' else -t['volume'] for t in trades[-window:]]
    
    dp = np.diff(prices)
    q = volumes[1:]  # 对齐
    
    # 线性回归
    A = np.vstack([q, np.ones(len(q))]).T
    lambda_hat, _ = np.linalg.lstsq(A, dp, rcond=None)[0]
    
    return lambda_hat

嗯,代码很简单。但要注意,这个模型假设价格冲击是线性的。实际上,大单的冲击往往是非线性的——你买 100 个币和买 1000 个币,价格影响不是简单的 10 倍关系。

避坑指南:我曾经在回测中直接用线性 λ 做下单决策,结果实盘时滑点比预期大了 3 倍。后来我改用分段拟合——小单用线性,大单用二次项。效果好了很多。

4.4 三个指标的关系与选择

咱们把这三个指标放在一起看看:

指标 关注点 时间尺度 适用场景
OBI 第一档买卖力量 极短期(秒级) 快速判断方向
WOP 多档深度分布 短期(分钟级) 识别支撑阻力
Kyle's Lambda 价格对成交的敏感度 中期(分钟-小时) 评估流动性、优化下单

我个人习惯是三者结合使用

  • 先用 OBI 快速扫一眼,判断当前谁在主导
  • 再用 WOP 确认多档的支撑/压力是否一致
  • 最后用 Kyle's Lambda 评估如果自己进场,会带来多大的滑点

说白了,这就是一个从看表面看深层,再到看后果的递进过程。

4.5 知识体系总览

下面这张图,把今天讲的三个指标以及它们之间的关系梳理了一下。你可以把它当作一个快速索引:

买卖压力指标知识体系 订单簿买卖压力 OBI 订单簿不平衡 WOP 加权买卖压力 Kyle's Lambda 只看第一档 快速判断方向 易被操纵 多档加权计算 识别支撑/压力 权重设计是关键 价格冲击系数 评估流动性 优化下单策略 从表面 → 深层 → 后果,递进式分析

嗯,今天的内容就到这。这三个指标,你可以在自己的策略里先跑跑看。记住,没有哪个指标是万能的,关键是理解它们各自的适用边界


专注资料整理