分解的订单流不平衡 (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
- 源论文: entities/Sitaru Calinescu Cucuringu 2023 Decomposed OFI · 中文摘要
- 标准 OFI: Order Flow Imbalance (OFI · Cont Kukanov Stoikov 2014 Price Impact Order Book Events
- 按档位拆: 多档订单簿不平衡
- 按参与者拆: 机构与散户的订单流差异 · 订单流分解 (Order Flow Decomposition
- 叠加用法: ClusterLOB(本文是其附录 A 的来源)
- 作者: Mihai Cucuringu