4、订单流不平衡定义:主动买盘与主动卖盘、买卖压力、订单流不平衡指标(OFI)的计算公式、标准化与平滑处理
订单流不平衡(Order Flow Imbalance, OFI)是微观市场结构理论中衡量买卖压力最核心的量化指标之一。与传统的成交量或持仓量不同,OFI 直接捕捉“主动成交方向”的净效应——即交易者愿意付出流动性成本(吃单)而非被动等待(挂单)的意愿强度。理解 OFI 的构建逻辑、计算公式与平滑方法,是运用订单流数据进行短期价格预测的前提。本章将从主动买卖盘的定义出发,逐步拆解 OFI 的数学表达、标准化处理及实战应用中的关键细节。
4.1 主动买盘与主动卖盘:订单流的基本构成
在订单驱动型市场中(如股票、期货、数字货币的连续竞价交易),每一笔成交都必然由一位主动方和一位被动方完成。主动方是指“以对手方价格立即成交”的交易者,被动方则是“挂单等待成交”的交易者。这种主动成交行为直接消耗了订单簿中的流动性,因此被市场参与者视为“真实交易意图”的体现。
主动买盘(Active Buy):当买单以卖一价(Ask)或更高价格成交时,该笔交易被标记为主动买盘。主动买盘意味着买方愿意支付溢价(即越过价差)来确保成交,反映了买方对价格上涨的迫切性。在逐笔成交数据中,主动买盘通常以“B”或“外盘”标记。
主动卖盘(Active Sell):当卖单以买一价(Bid)或更低价格成交时,该笔交易被标记为主动卖盘。主动卖盘意味着卖方愿意接受折价来确保成交,反映了卖方对价格下跌的紧迫感。在逐笔数据中通常以“S”或“内盘”标记。
4.2 买卖压力:从微观行为到市场情绪的映射
买卖压力(Buy/Sell Pressure)是主动买卖盘在时间维度上的累积效应。当主动买盘持续大于主动卖盘时,市场呈现“买方主导”状态,价格倾向于上行;反之,当主动卖盘持续占优时,市场呈现“卖方主导”状态,价格倾向于下行。这种压力并非简单的成交量对比,而是需要结合订单簿深度(Depth)和价格变动幅度来综合衡量。
一个重要的微观结构现象是:买卖压力与价格变动之间存在非线性关系。在流动性充足的市场中,较大的主动买盘可能只会引起较小的价格上涨;而在流动性枯竭时,即使较小的主动买盘也可能引发价格跳变。因此,OFI 的设计初衷就是同时捕捉“主动成交方向”和“订单簿深度变化”两个维度,从而更准确地刻画买卖压力的真实强度。
| 市场状态 | 主动买盘 vs 主动卖盘 | 订单簿深度变化 | OFI 特征 | 价格倾向 |
|---|---|---|---|---|
| 强买方主导 | 买盘显著大于卖盘 | 买盘深度增加,卖盘深度减少 | OFI >> 0,持续为正 | 快速上涨 |
| 弱买方主导 | 买盘略大于卖盘 | 买盘深度微增 | OFI > 0,但幅度较小 | 缓慢上涨或横盘 |
| 多空均衡 | 买卖盘接近 | 深度变化不显著 | OFI 围绕 0 波动 | 区间震荡 |
| 弱卖方主导 | 卖盘略大于买盘 | 卖盘深度微增 | OFI < 0,但幅度较小 | 缓慢下跌或横盘 |
| 强卖方主导 | 卖盘显著大于买盘 | 卖盘深度增加,买盘深度减少 | OFI << 0,持续为负 | 快速下跌 |
4.3 OFI 计算公式:从订单簿快照到不平衡度量
订单流不平衡指标(OFI)最早由 Cont, Kukanov 和 Stoikov(2014)在《The Price Impact of Order Book Events》中系统提出。其核心思想是:价格变动不仅取决于主动成交的方向,还取决于订单簿两端(Bid 和 Ask)挂单量的增减变化。OFI 通过比较相邻两个时间点的订单簿状态,量化买卖压力的净变化。
基础计算公式:
OFI_t = (BidQ_t - BidQ_{t-1}) - (AskQ_t - AskQ_{t-1})
其中:
BidQ_t = 时刻 t 的买一档挂单量
AskQ_t = 时刻 t 的卖一档挂单量
BidQ_{t-1} = 时刻 t-1 的买一档挂单量
AskQ_{t-1} = 时刻 t-1 的卖一档挂单量
这个公式的含义是:如果买一档的挂单量增加(BidQ_t > BidQ_{t-1}),说明有新的买单进入市场,增加了买方压力;如果卖一档的挂单量减少(AskQ_t < AskQ_{t-1}),说明卖单被主动吃掉,同样增加了买方压力。两者相减,得到净的买卖压力变化。
扩展公式(考虑多档深度):
在实际应用中,仅使用买一/卖一档可能信息不足。更稳健的做法是考虑前 N 档(通常 N=5 或 10)的挂单量变化,并对不同档位赋予不同权重(距离最优价越近,权重越高):
OFI_t = Σ_{i=1}^{N} w_i × [(BidQ_i,t - BidQ_i,t-1) - (AskQ_i,t - AskQ_i,t-1)]
其中:
w_i = 第 i 档的权重,通常 w_i = 1/i 或 w_i = (N-i+1)/N
BidQ_i,t = 时刻 t 第 i 档买价对应的挂单量
AskQ_i,t = 时刻 t 第 i 档卖价对应的挂单量
4.4 标准化处理:让 OFI 在不同市场间可比
原始 OFI 值受合约规模、价格水平、流动性等因素影响,不同品种或不同时间段的 OFI 值差异巨大。例如,某股票 OFI 为 5000 可能意味着强烈买压,而另一只高价股 OFI 为 5000 可能只是正常波动。因此,标准化处理是 OFI 应用的关键步骤。
常用标准化方法:
- Z-score 标准化:将 OFI 减去其滚动均值,再除以滚动标准差。公式为:
Z_OFI = (OFI - μ_OFI) / σ_OFI。Z-score 将 OFI 转换为标准正态分布,便于设定统一的阈值(如 ±2 作为异常信号)。 - Min-Max 归一化:将 OFI 映射到 [0, 1] 区间。公式为:
Norm_OFI = (OFI - Min_OFI) / (Max_OFI - Min_OFI)。适用于需要固定输出范围的场景,但对异常值敏感。 - 百分比排名:将 OFI 转换为过去 N 个周期的百分位排名。例如,当前 OFI 处于过去 100 个周期的第 95 百分位,表示当前买压非常强烈。
- 除成交量标准化:将 OFI 除以同期成交量或成交额,得到“单位成交量的不平衡度”,用于衡量买卖压力的“效率”。
4.5 平滑处理:去除噪声,提取趋势
逐笔或逐 tick 计算的 OFI 序列通常包含大量噪声,直接用于信号生成会产生频繁的假信号。平滑处理可以滤除微观噪声,提取 OFI 的中期趋势。常用的平滑方法包括:
- 简单移动平均(SMA):对过去 K 个 OFI 值取平均。优点是简单直观,缺点是对近期变化反应滞后。
- 指数移动平均(EMA):赋予近期数据更高权重。公式为:
EMA_t = α × OFI_t + (1-α) × EMA_{t-1},其中 α = 2/(K+1)。EMA 比 SMA 反应更快,更适合捕捉趋势转折。 - 加权移动平均(WMA):对不同时间点的 OFI 赋予线性递减权重。
- 中位数滤波:取过去 K 个 OFI 值的中位数,对异常值不敏感,适合去除尖峰噪声。
| 平滑方法 | 计算公式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| SMA | (OFI_t + OFI_{t-1} + ... + OFI_{t-K+1}) / K | 简单、稳定 | 滞后明显 | 低频交易、趋势确认 |
| EMA | α × OFI_t + (1-α) × EMA_{t-1} | 反应快、权重合理 | 参数敏感 | 中高频交易、信号触发 |
| WMA | Σ (w_i × OFI_i) / Σ w_i | 灵活控制权重 | 计算稍复杂 | 自定义衰减速度 |
| 中位数滤波 | median(OFI_t, ..., OFI_{t-K+1}) | 抗异常值 | 丢失部分信息 | 噪声较大的数据 |
4.6 案例拆解:OFI 在股指期货分钟级预测中的应用
背景与约束:某量化团队针对沪深300股指期货(IF)主力合约,构建分钟级短期方向预测模型。数据源为 Level-2 快照数据(每 500ms 一次),包含前 5 档买卖挂单量。目标是在未来 1 分钟预测价格涨跌方向,用于日内高频交易信号。
初始现象:团队最初直接使用原始 OFI 作为特征,发现模型在样本内表现良好,但样本外回测中信号频繁翻转,胜率仅 52%,且交易成本后几乎无盈利。进一步分析发现,原始 OFI 序列的噪声极大,且不同时段(早盘、午盘、尾盘)的 OFI 分布差异显著。
关键输入数据:
时间戳 买一价 买一量 卖一价 卖一量 买二量 卖二量 ...
09:30:00.0 3850.0 120 3850.2 80 150 95
09:30:00.5 3850.0 115 3850.2 75 145 100
09:30:01.0 3850.2 90 3850.4 110 130 120
09:30:01.5 3850.2 85 3850.4 105 125 115
...
分析判断过程:
- 首先计算原始 OFI(使用前 5 档加权,权重 w_i = 1/i),发现 OFI 序列在正负之间剧烈震荡,自相关性极低。
- 对 OFI 进行 Z-score 标准化(滚动窗口 60 期),标准化后的 OFI 分布更稳定,但信号仍然偏噪。
- 引入 EMA 平滑(α = 0.3),平滑后的 OFI 趋势性明显增强,与未来 1 分钟收益的相关系数从 0.08 提升至 0.21。
- 进一步按交易时段分段标准化(早盘 09:30-10:00、午盘 10:00-11:30、下午 13:00-14:00、尾盘 14:00-15:00),各时段分别计算均值和标准差,解决了不同时段 OFI 分布差异的问题。
实际操作步骤:
1. 数据清洗:剔除成交量为 0 的快照,处理价格跳空(涨跌停)时的异常值。
2. 计算多档 OFI:使用前 5 档挂单量,权重 w_i = 1/i。
3. 标准化:按交易时段分组,每组使用滚动 60 期 Z-score。
4. 平滑:对标准化后的 OFI 应用 EMA(α=0.3)。
5. 信号生成:当平滑 OFI > 1.5 时做多,< -1.5 时做空,|OFI| < 0.5 时平仓。
6. 回测验证:使用 2023 年 1-6 月数据训练参数,7-12 月数据验证。
结果对比:
| 方案 | 胜率 | 平均盈亏比 | 夏普比率 | 最大回撤 |
|---|---|---|---|---|
| 原始 OFI(无标准化、无平滑) | 52.3% | 0.95 | 0.8 | 4.2% |
| Z-score 标准化 + 无平滑 | 54.1% | 1.02 | 1.1 | 3.5% |
| Z-score + EMA 平滑 | 57.8% | 1.18 | 1.6 | 2.1% |
| 分段标准化 + EMA 平滑 | 59.2% | 1.25 | 1.9 | 1.6% |
风险与代价:分段标准化虽然提升了表现,但增加了参数数量(每个时段需要独立的均值和标准差),存在过拟合风险。此外,EMA 平滑引入了 2-3 个 tick 的滞后,在极端行情下可能错过最佳入场点。
复盘经验:OFI 的标准化和平滑不是“越多越好”,需要根据交易频率和市场特征进行调优。对于分钟级预测,EMA(α=0.3) 配合分段 Z-score 是较优组合;对于 tick 级高频交易,可能需要更短的平滑周期(α=0.5 或 0.6)以保持响应速度。
4.7 常见误区与总结复盘
误区一:忽略价格变动对 OFI 的影响。当买一价或卖一价发生跳变时,仅比较挂单量变化会产生误导。例如,买一价从 100 升至 101,同时买一量从 100 降至 80,如果只看数量变化,会误判为买方压力减弱;但实际上价格上移本身反映了买方强势。正确的做法是同时考虑价格和数量的联合变化。
误区二:使用全样本静态标准化参数。市场波动率具有时变性,使用固定均值和标准差会导致 OFI 在低波动期被过度放大、在高波动期被过度压缩。滚动窗口(如 50-200 期)是更稳健的选择。
误区三:过度平滑导致信号滞后。虽然平滑可以降低噪声,但过度平滑会让 OFI 对突发性大单反应迟钝。建议同时监控“原始 OFI”和“平滑 OFI”,当两者方向一致时信号更可靠,背离时则需警惕。
误区四:忽视不同档位权重的选择。使用等权重(w_i = 1)会高估远档挂单的影响,而远档挂单往往流动性较差、撤单率高。推荐使用 1/i 或指数衰减权重,更贴近价格发现的真实过程。
总结:OFI 是连接微观订单流与短期价格预测的桥梁。其核心价值在于将“主动买卖方向”和“订单簿深度变化”融合为一个可计算的指标。通过合理的标准化和平滑处理,OFI 能够有效捕捉买卖压力的动态变化,为短期价格预测提供高质量的特征输入。在实际应用中,交易者需要根据自身交易频率、品种特性和数据质量,灵活调整 OFI 的计算参数、标准化方法和平滑策略,并通过严格的回测验证其有效性。