分解的订单流不平衡 (Decomposed OFI)

大白话:标准的 OFI 把「最优档买卖价与挂单量的净变化」算成一个数——挂单、撤单、成交造成的,全混在一起。 有了逐笔委托(MBO)数据,可以按事件类型拆成三份分别算:挂单的那份、撤单的那份、成交的那份。 拆开的结论有点反直觉:解释「刚才为什么涨」没有变好,但预测「接下来一分钟会不会涨」的交易收益翻了 5 倍—— 而且挂单那一支压倒性最重要。

定义

concepts/microstructure/Order Flow Imbalance (OFI) 的标准定义只看最优档的价与量怎么变,不管变化来自哪种事件。本文把订单簿事件分三类:

类别 含义 LOBSTER 类型 OFI 符号
add 提交限价单,进入订单簿 1 与标准 OFI 同号
cancel 撤单(部分或全部),从订单簿移除 2(取消)、3(删除) 反号(撤买单是不利信号)
trade 成交,双方都从订单簿移除 4(可见限价单)、5(隐藏限价单)、6(交叉成交) 同号(买方主动为正)

核心恒等式:

\text{标准 OFI} = \text{add OFI} + \text{cancel OFI} + \text{trade OFI}

即:分解是标准 OFI 的一个重排,不是替代。任何用标准 OFI 的模型都可以改写成三个分量的组合。

归一化版本:与标准 OFI 的归一化一致(按各档挂单量之和归一),可跨股票比较。

一个必须知道的细节:隐藏限价单的成交不改变订单簿,因此对应的 trade OFI 为零。这是分解的定义内在性质,不是实现瑕疵。

两个场景,两个相反的结论

这是本文最重要、也最容易被误读的地方。

同期解释力:分解没有帮助

用同一时段的 OFI 解释同一时段的收益 → 分解版与标准 OFI 解释力相当。

直觉上 add/cancel/trade 的经济含义不同(挂单是意愿、撤单是后悔、成交是成交),为什么分开算没帮助?论文没给机制解释。一个合理的读法:同期解释力主要来自最优档的净不平衡,三种事件在同期是冗余的。

前瞻预测:统计上没改善,经济上大幅改善

模型 拟合 M_3 PnL (bp) / SR M_7 PnL (bp) / SR
FPI[1] OLS 0.22 / 1.24 0.68 / 5.86
FPI[1] Lasso 0.59 / 2.17 1.26 / 5.22
FPID[1] Lasso 1.01 / 4.26 2.42 / 10.65
FPI[10] Lasso 0.54 / 2.09 1.33 / 5.18
FPID[10] Lasso 1.66 / 6.90 3.15 / 13.51

(FPI = 标准 OFI,FPID = 分解 OFI;下标为档位数,M 为滞后数)

但样本外 R^2 全是负的(最优 −0.082)——分解没有改善统计预测力。

负 R^2 ≠ 没有经济价值。 论文明确引 Cont 等、Ait-Sahalia 等说明这一点:样本外 R^2 衡量的是预测精度,而策略收益来自预测的方向正确且幅度超过买卖价差。这两个口径可以给出相反的排序。

交易策略(Chinco 等 2019 的标准做法):只在预测收益超过相对买卖价差时交易;预测幅度越大、模型自身样本内波动越小,配仓越大;1 分钟视界,每分钟投 1 美元。

挂单(add)为什么最重要

对最佳模型 FPID[10]_{M_7} 做 Lasso 变量选择频率统计:

发现 细节
add ≫ cancel > trade 每个时间滞后下 add 变量被选中的次数都明显高于另两类;add 被选中的频率约为其他分量的 3 倍
trade 极少被选中 最低
更长的滞后更重要 滞后从 1 到 30 分钟,选择频率单调上升(三个分量都如此)
档位之间差不多 唯一例外:最优档的 add 变量贡献显著高于其他任何组

「最优档 add 特别重要」同时解释了另一件事:为什么加档位(前 1 档 → 前 10 档)对分解版的提升有限——因为信号本来就集中在最优档的 add 上。

另一个值得记住的数字:53% 的回归里只有截距项非零——多数预测其实是常数(样本内收益均值)。这是评估「Sharpe 13.51」时必须记住的背景。

与本 wiki 其他页面的分工

页面 讲的是哪一条路
Order Flow Imbalance (OFI) 标准 OFI 的定义与同期解释力
本页(分解 OFI) 按事件类型拆开:统计上无改进、经济上 5 倍;add 最重要
订单流分解 (Order Flow Decomposition) 完全不同的另一条路:按「是否高频」拆订单流(Shen 2023 的 HFQ / 非 HFQ),结论是非 HFQ 订单的不平衡因子预测力更强
多档订单簿不平衡 (Multi-Level Order Book Imbalance) 按档位拆(PCA 整合),不是按事件类型拆

容易混的三件事:按事件类型拆(本文)、按档位拆(多档 OFI)、按参与者/速度拆(订单流分解页)。三者正交,可以叠加。

对应链接:Order Flow Imbalance (OFI · 订单流分解 (Order Flow Decomposition · 多档订单簿不平衡

与 ClusterLOB 的关系

本页的方法是 ClusterLOB 附录 A 的来源——ClusterLOB 原文明确写「introduced by Sitaru et al. (2023)... we adopt similar ideas as presented in this line of work」。

但贡献不是同一件事:

分解 OFI(本文) ClusterLOB
拆分的维度 事件类型(add / cancel / trade) 参与者类型(方向型 / 机会型 / 做市型)
是否区分参与者 否 是
相对标准 OFI 的增量 前瞻 PnL ×5,Sharpe 13.51 在分解之上再按簇算,Sharpe 1.34

两者是叠加关系。

A 股落地的障碍

障碍 说明
MBO 数据是硬约束 本文的增量完全来自 MBO 独有的事件类型信息。A 股无完整 MBO(见 concepts/data-features/Level-2 档位与委托队列 (L2 Depth and Order Queue))
逐笔成交只能近似 A 股逐笔成交带委托号,可还原 cancel 与 trade 的近似;但 add(挂单未成交)完全丢失——而这恰是本文发现最重要的分量
T+1 1 分钟视界的策略在 T+1 下无法当日平仓,Sharpe 13.51 不可直接复制
涨跌停 触板时价格无法继续移动,前瞻信号被截断

Cross-ref