订单流失衡(OFI)是什么?如何理解盘口压力
了解 OFI 如何汇总最佳买卖报价的带符号变化,理解它与静态队列失衡、带符号成交量的区别,以及它和短周期价格变化之间的条件关系。
本指南内容OFI 衡量什么,又不衡量什么?
简短摘要
订单流失衡(order flow imbalance,OFI)把选定时间窗口内最佳买价与最佳卖价的带方向变化加总。它不同于只看某一张订单簿快照中的买卖数量比例:OFI 可以把新挂单、撤单、成交,以及最佳价格档位的移动纳入计算。 研究发现,OFI 与短时间尺度的中间价变化存在有条件的统计关系;市场深度较小时,估计的价格敏感度可能更高。这些结果依赖具体数据、市场与时间尺度。OFI 本身不是可靠的交易信号,也不保证获利。
OFI 衡量什么,又不衡量什么?
限价订单簿记录当前可见的最佳买价、最佳卖价,以及各价格上的显示数量。OFI 不是一种订单类型,也不是交易所提供的特殊指令,而是研究者根据按顺序排列的市场数据,计算最佳报价如何变化的一项统计量。按照常见定义,正值表示测量窗口内的顶层变化净倾向于买方;负值表示卖方可见供给变化占优。这个数值不能指出参与者的身份或意图,也不能说明下一步价格会走向哪里。
只汇总已完成的成交并不足以计算 OFI。最佳买价上的显示数量增加,意味着买方队列变大;若数量因为撤单或成交而减少,队列就缩小。卖方一侧的符号方向相反:最佳卖价增加显示数量,会增加可见卖方供给;卖方队列减少则降低显示供给。最佳价格档位被改善,或被全部消耗后移到下一档,也可能对 OFI 有贡献。
两个时点的订单簿快照即使完全相同,也不能说明中间发生了相同的事件。一种情形可能是数量先挂出后撤掉;另一种情形可能是相同数量被成交消耗,随后又有新挂单补回。OFI 将窗口内的带符号事件贡献加总,因而用一个数字概括这段变化过程。但它不能替代原始消息流;分析者仍需明确哪些事件被纳入以及如何合并事件。
符号取决于最佳价格和显示数量的变化
设事件 n 之后最佳买价及其显示数量分别为 Pᵇₙ 和 qᵇₙ;最佳卖价及其显示数量分别为 Pᵃₙ 和 qᵃₙ。1(条件) 表示条件成立时取 1,否则取 0。一种标准 OFI 定义将单个事件的贡献写为:
eₙ = 1(Pᵇₙ ≥ Pᵇₙ₋₁)qᵇₙ − 1(Pᵇₙ ≤ Pᵇₙ₋₁)qᵇₙ₋₁ − 1(Pᵃₙ ≤ Pᵃₙ₋₁)qᵃₙ + 1(Pᵃₙ ≥ Pᵃₙ₋₁)qᵃₙ₋₁
一个窗口的 OFI 是落在该窗口内的事件贡献之和:OFIₖ = Σ eₙ。最佳价格不变时,公式会简化为相关一侧的数量变化。最佳买价上的数量增加贡献为正,买方队列的数量减少贡献为负;最佳卖价上的数量增加贡献为负,卖方队列减少则贡献为正。
最佳价格发生变化时,只看数量差就不够了,价格档位的转换也会进入计算。例如,最佳买价上移意味着出现了更高的新买价;最佳卖价上移可能意味着旧的卖价档位已经被成交消耗或被撤掉。公式中的价格条件决定每一侧应使用旧数量还是新数量。因此,把来自不同时间源的数据拼接,或把同一时刻的消息排错顺序,即使后续加总算得很仔细,结果也可能不是正确的 OFI。
OFI 的符号规则不试图推断订单背后的意图。买方撤单会减少显示的买方数量,从而拉低 OFI,即使这并不是一笔卖出成交。卖方撤单则减少可见卖方供给,产生向上的贡献。这只是描述订单簿变化的统计规则,不能据此断定某个参与者正在主动冲击市场或操纵价格。
假设示例:逐项计算四个事件
假设最小价格变动单位为 0.25,起始最佳买价是 100.00、显示数量为 10;最佳卖价是 100.25、显示数量为 8。数量单位取决于数据源,例如可能是合约张数。以下只是用于核对算法的假设算术示例,既非真实行情,也不是交易表现。
第一个事件中,最佳买价不变,买方队列增加 4 个单位,数量从 10 变为 14,所以贡献为 +4。第二个事件在同一买价撤掉 3 个单位,数量从 14 降至 11,贡献为 −3。第三个事件中,最佳卖价仍为 100.25,但卖方队列增加 4 个单位,数量从 8 增至 12。可见卖方供给增加,因此贡献为 −4。
第四个事件中,可以立即成交的买入订单消耗掉旧最佳卖价 100.25 上的全部 12 个单位。新的最佳卖价上移到 100.50,并显示 6 个单位。由于旧卖价上的数量全部消失且最佳卖价上移,这个事件按旧卖方数量计算,贡献为 +12。四个事件的总 OFI 为 +4 − 3 − 4 + 12 = +9 个数量单位。
最后一个事件之前,中间价是买卖价的平均数:(100.00 + 100.25) ÷ 2 = 100.125。事件之后,中间价为 (100.00 + 100.50) ÷ 2 = 100.25,变化 +0.125,恰好是本例 0.25 最小变动单位的一半。这个短序列中,正 OFI 和中间价上升同时出现,但四个事件不足以估计回归系数,也不能证明 OFI 导致了价格变化。示例的用途只是检查符号和算术是否一致。
真实数据流可能把一次订单簿变化拆成多条消息。研究者可以采用不同的合并规则,也可能按消息而不是按经济事件计算贡献。发布 OFI 数字时,应说明消息如何分组、相同时间戳的更新如何排序,以及窗口开始和结束时的订单簿状态如何确定。

与中间价的关系可能随市场深度变化
一种简单的研究设计是把交易时段切成若干窗口,再比较每个窗口的 OFI 总量与中间价变动。示意性回归可以写成 Δmₖ = α + β·OFIₖ + εₖ。β 是在所选工具、价格字段、数据源、窗口长度和数量单位下估计的敏感度。换到其他市场时,系数不保证具有相同大小或相同符号。
Cont、Kukanov 和 Stoikov 使用纽约证券交易所 Trades and Quotes 数据中的 50 只美国股票,研究订单簿事件对价格的影响。他们报告,在较短时间窗口内,价格变化与 OFI 近似呈线性关系;估计直线的斜率随市场深度增加而下降。订单簿较薄时,相同数量的净事件可能比在深厚订单簿里引起更大的最佳报价变动,因为对手一侧显示的数量更少。这是特定样本和研究设计下的实证结果,并不是所有产品和时期都适用的普遍价格定律。Cont、Kukanov 与 Stoikov 的论文说明了数据范围与方法。
估计结果会受样本窗口和中间价定义影响。如果起始报价有延迟、交易时段之间存在较长空档,或者 OFI 使用合约数量而结果价格来自另一种合约单位,系数的含义就会改变。日内时段、最小价位、价差、波动性、参与者构成、消息延迟和市场状态也可能影响估计。若报告没有交代这些细节,直接比较两篇研究的系数可能没有意义。
OFI 不等于队列失衡或带符号成交量
静态队列失衡比较同一时点可见的最佳买方和卖方数量。一种常见比率为 (Qᵇ − Qᵃ) ÷ (Qᵇ + Qᵃ);若数量非负且总和为正,结果介于 −1 与 +1 之间。它概括的是某一张订单簿快照中的相对规模。期货 Bid Size 与 Ask Size 指南解释了为什么单个快照本身不能预测价格方向。
OFI 则把选定窗口内的带符号变化加总。它的单位取决于数量单位和窗口长度;若没有另外定义并进行标准化,OFI 不一定落在 −1 到 +1 之间。举例来说,两张快照可能有完全相同的买卖比例,但前一秒里,一本订单簿通过新增限价单而扩大,另一本则因成交和撤单先缩小、后来又由新订单补回。最终快照相似,OFI 仍可能不同。
带符号成交量也是另一种指标。它会把已成交的交易分类为买方或卖方主动发起,再对成交数量求和,通常需要交易记录、报价记录及一个判定符号的方法。OFI 还会纳入未成交限价单的新增和撤销,以及最佳报价的变化。卖价成交并不代表整个时段的净订单流都偏向买方;买卖主动方分类也不会记录撤掉的订单。
Microprice(微价格)也常被误认为 OFI。某些方法根据当前买价、卖价和队列大小加权,计算一个用于短期分析的替代中间价;OFI 则汇总一段时间内的事件变化。Stoikov 的研究讨论高频 microprice 估计量,但那与 OFI 不是同一指标,也没有证明某个策略在所有市场环境中有效。Stoikov 的 microprice 研究介绍了这种不同的价格度量。
从正确的数据源重建订单簿
计算 OFI 需要从有序消息流中重建每个事件前后的最佳买卖价和显示数量。OHLCV K 线、总成交量或只有成交记录的数据,都没有记录最佳价格档位上挂单新增与撤销的先后顺序。Nasdaq TotalView-ITCH 这类直接行情流会定义增加、执行、删除和修改订单的消息。但该文档对应特定的 Nasdaq 产品,并不意味着各交易所使用相同字段。Nasdaq TotalView-ITCH 5.0 接口规格。
如果消息序号出现缺口、数据包丢失,或行情正在恢复,就应排除相关时间段,或明确标注,直到订单簿状态重新一致。漏掉一条撤单消息,会把已经撤出的数量留在簿上;漏掉一笔成交,则可能让已经成交的数量看起来仍在显示。之后再谨慎地应用统计公式,无法修复这种数据损坏。方法说明应列出订单簿状态在哪些时段被视为有效。
预先定义具体证券或合约、交易场所、数据源、时段、交易日期、时区、数量单位以及时间戳字段的含义。交易所事件时间、数据供应商处理消息的时间和用户接收数据的时间可能不同。合并多源数据时,表面上同时发生的更新可能按不同顺序到达。用单一场所的 OFI 对比多个场所合成的中间价,也意味着两种测量覆盖范围不一致。
Market by Price 数据可能提供最佳价格档位上的总数量变化;Market by Order 数据则提供更细的匿名订单消息。若 MBP 能完整准确地反映最佳档位总量,它可能足以支持某些 OFI 定义,但不会显示队列由哪些单笔订单组成。应查明 feed 的覆盖范围与数据恢复方式。期货订单簿与 Time and Sales 的区别有助于区分订单簿状态与已经成交的交易记录。
时间窗口和标准化决定数值尺度
OFI 可以按日历时间窗口、固定数量的事件,或预先定义的报价更新来累计。一秒窗口与一千个事件的窗口并没有回答同一个问题。按事件数划分的窗口,在交易活跃时涵盖更短的日历时间;固定时长窗口每期包含的消息数则会变化。不能把不同窗口的原始 OFI 总量当作同一尺度直接比较。
以股数或合约数表示的未标准化总量,往往会随窗口变长而增加。除以事件数、窗口时长、典型深度或其他基准,可以让特定比较更容易,但同时也会改变指标定义和单位。深度很小时,按深度标准化还可能变得不稳定。应一并说明公式、事件分组规则、窗口、数量单位,以及深度接近零时的处理办法。
结果变量中间价的定义也要明确:它是某一个交易场所最佳买卖价的平均值、合并的 NBBO,还是数据供应商提供的另一种中间价字段?把单个场所的 OFI 与合成价格联系起来并非不可行,但这表示研究者将覆盖范围不同的两个量进行关联。开盘边界、休市、节假日、交易中断和最小价位调整,应在整个样本中采用一致的规则。
在开始分析前,先确定 OFI 窗口、中间价观察期限、标准化方法、时段边界处理方式以及需要排除的时期。如果看过结果后才改变这些决定,就不要把新分析说成原先预先设定的检验。比较市场或产品时,时间单位和数量的货币价值也应匹配;乘数不同的期货合约,其合约张数不能直接视为可比数量。
即使计算正确,仍有哪些限制?
显示的订单簿不等于全部流动性。隐藏单和冰山单、内部化成交、场外交易、数据包的深度限制,以及各交易场所的规则,都可能没有出现在选定的 feed 中。显示数量被撤销或新增只说明观察到的变化,不会说明下单者为何这样做。数据延迟、消息丢失、顺序错误或订单簿恢复错误也会影响测量。
OFI 与后续价格变动的历史关系,可能随着深度、价差、最小价位、参与者竞争和交易状态而改变。与中间价的统计关系,不等于策略可以实现的收益。实际结果取决于入场价格、信号可用时间、延迟、部分成交、佣金、交易所费用、返佣、市场冲击与退出方式。在只有几个 tick 的时间范围内,这些项目可能与观察到的价格变动一样大。
Gould 与 Bonart 研究了 Nasdaq 股票的买卖队列比率与之后中间价变动之间的关系,并发现大 tick 与小 tick 股票的关系有所不同。这是特定样本下关于静态队列失衡的结果,并不能证明 OFI 在所有市场都有效或可盈利。论文应结合作者采用的数据范围和预测目标阅读。
研究 OFI 时应保留时间顺序,只使用相关消息到达后才实际可知的特征,并把交易成本纳入结果指标。如果同时查看大量窗口、市场、阈值或指标变体,最后只检验选出的定义并不能消除搜索过程的影响。每项结果都依赖证券、样本日期、数据源和指标定义;不能假定同一关系未来仍会存在。
用清晰而有限的范围报告结果
有用的结论不应把 OFI 简化成一个“看涨”或“看跌”词语。例如,研究者可以说明,在特定股票和交易时段内,每一秒的最佳报价 OFI 总量与选定的同一窗口中间价变动呈何种关系,以及按市场深度分组时估计系数如何变化。即便是这样的表述,若没有数据覆盖范围、时间定义、窗口、价格变动定义和数量单位,也无法复现。
报告应记录所用 feed、交易场所、合约标识、时间戳字段、交易时段、订单簿重建和缺口处理规则、事件贡献公式、窗口、标准化方式、中间价定义、预测期限和不确定性指标。若合并多种产品,应说明权重分配方式,以及不同数量单位是否已换算到共同尺度。忽略这些内容时,汇总系数可能主要体现少数深度较大的产品或交易最活跃时段。
示例中的 10、8、14 等数字仅为展示计算而选取,不是 Nasdaq、CME、经纪商界面或历史回测的实测数据。Nasdaq 链接说明相应 ITCH feed 中消息的定义;研究论文说明作者如何从具体数据得出结论。这些来源都不会把假设数字变成交易建议或个人投资建议。
常见问题
Q1只用 OHLCV 数据可以计算 OFI 吗?
不可以。OHLCV 不记录最佳买卖价上的限价单新增和撤销顺序。需要覆盖范围与顺序合适的订单簿更新数据。
Q2OFI 为正是否意味着价格一定上涨?
不是。正 OFI 描述的是选定窗口内最佳报价事件的净符号,不保证下一次中间价变化方向,也不保证扣除成本后的收益。
Q3OFI 与买方主动成交量有什么区别?
带符号成交量把已成交交易归类并按买方或卖方主动方向加总。OFI 还计算最佳报价上的价格与显示数量变化,包括新限价单和撤单。
资料来源与延伸阅读
报告问题
我们会准备一封包含本文链接的邮件。发送后,Mark 才会收到你的反馈
快速检查
读完指南后,用 3 道题检查一下
问题 01
最佳价格没有变化时,以下哪种变化会带来正的 OFI 贡献?
选择答案即可查看解释
期权术语表
清楚解释从看涨、看跌和期权链到 IV、希腊字母、未平仓量与最大痛点等核心期权术语
浏览期权术语表