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 知识体系总览
下面这张图,把今天讲的三个指标以及它们之间的关系梳理了一下。你可以把它当作一个快速索引:
嗯,今天的内容就到这。这三个指标,你可以在自己的策略里先跑跑看。记住,没有哪个指标是万能的,关键是理解它们各自的适用边界。