消息事件订单流失衡(MessageEventOrderFlowImbalance)

增量式、因果技术分析文档

摘要

MessageEventOrderFlowImbalance 是 RTTA 对消息流订单流失衡的流式实现:它不使用 Cont 风格的最优报价快照差,而是对离散限价订单簿 / 成交事件(新增、撤单、成交)的有符号贡献作滚动求和。

更新 API

result = rtta.MessageEventOrderFlowImbalance(window=50, fillna=True).update(
    event_type, side, qty
)
# result.ofi, result.event, result.signed_size

advance(...) 使用相同的三个输入,但不返回 Python 对象。多输出 batch(event_type, side, qty) 分别为 ofieventsigned_size 返回数组。

工作原理

快照 OFI(OrderFlowImbalance)根据最优买卖价和数量的变化重构压力。消息流 OFI 则直接处理交易所事件流:流动性新增、撤单和成交。RTTA 把每个事件映射为有符号贡献,并在事件的滚动窗口内累积这些贡献。滚动和为正,表示近期消息历史中净买盘/买入压力;为负则表示净卖盘/卖出压力。

递推公式

令 \(e_t\in\{1,2,3\}\) 为事件类型,\(s_t\in\{+1,-1\}\) 为一侧,\(q_t\ge0\) 为数量。定义贡献:

\[\delta_t = \begin{cases} +s_t q_t & e_t = 1 \quad\text{(新增)} \\ -s_t q_t & e_t = 2 \quad\text{(撤单)} \\ +s_t q_t & e_t = 3 \quad\text{(成交)} \\ +s_t q_t & \text{其他情况} \end{cases}\]

在由最近 \(n\) 个贡献组成的滚动窗口 \(W_t\)(window)上:

\[\operatorname{OFI}_t = \sum_{\tau\in W_t} \delta_\tau\]

每次更新还会把最新贡献作为 event 输出,并把有符号数量 \(s_tq_t\) 作为 signed_size 输出。

实现说明

该递推过程在 src/rtta/indicator.cppclass MessageEventOrderFlowImbalance 中实现,使用 RollingSumWindow。当 fillna=False 时,在窗口填满之前,ofiNaN

这是面向研究的事件 API;若不先转换数据源,就不能与盘口最优档 OrderFlowImbalance 互换使用。

参考资料