源文件:research/quant_digests/2026-04-02_1140_extreme-ofi-tradeflow-continuation-alpha.md
README.md + Order_Flow_Imbalance.ipynb)+ 2014 *Journal of Financial Econometrics* 微观结构经典论文 grounding + Binance USDⓈ-M 1m public taker-flow proxy 最小快检base alpha 很清楚:极端订单流失衡 → 极短期价格延续。
不是“盘口很热闹”这种解释性结论;真正能交易的是:
> 把一段很短时间里的 signed trade flow 做标准化,只有在失衡足够极端时才顺着做,赌接下来 1s ~ 5m 还有 residual continuation。
所以这轮它属于 raw alpha,不是 filter / regime / overlay。
---
最近 digest 池里已经有:
但 “同一标的自身 trade-flow 失衡 → 后续几分钟 continuation” 这条最朴素、最底层的 microstructure raw alpha,反而没有单独写成一篇 repo-first digest。
这轮值得 intake 的原因有四个:
1m / 3m / 5m 高强度实验。如果问:它为什么比继续补一个 filter 更值得? 答案是: 因为它本身就是一条可下注的 raw alpha,不是门卫。
---
README.mdOrder_Flow_Imbalance.ipynb10.1093/jjfinec/nbt0031m1m / 3m / 5m / 15m---
这份 repo 的价值,不在“又一个 microstructure 名词”,而在它把一条基础但真实的 raw alpha 链条写出来了:
j 时交易翻成人话: 它不是“看到买盘多就机械追”;而是先把极短期买卖失衡转成 standardized signal,只在最极端一小撮时刻顺着打。
这就让它和“泛泛而谈订单簿压力”的材料不一样——它已经有了一个最小可交易外壳。
---
notebook 用的是 2025-05 的 BTC-USDT trade 数据,跨:
OKXGATE_IOCOINBASEDERIBITBITSTAMPBINANCE关键数:
Deribit 还专门做了合约单位归一:
$10 / contract 折算成 BTC 数量这一步很重要: 作者不是在抽象讨论 OFI,而是在处理真实 venue 数据口径差异。
预处理函数 preprocess_data() 的核心是:
signed_qty = +qty / -qtytau_str 窗口上滚动求和,得到 trade_flow_rawrepo 默认起点:
tau = 100ms但后面 sweep 说明:
也就是说,这条线真正可用的不是“tick 级有神奇预测力”,而是: 持续几秒的同向 aggressor flow 才更像可交易压力。
generate_signals() 做的不是分类器,而是最朴素的一条线:
forward_returntrade_flow -> forward_returnpredicted_return|predicted_return| > j_threshold 时交易动态阈值 j_threshold 的设计很关键:
翻成人话: 不是每个 OFI 都追,只追最极端那一层。
calculate_accounting() 的核心假设:
sign(predicted_return) 决定买卖0.00005)max_inventory_limit = 10这个 accounting engine 暴露出一件很真实的事:
> entry alpha 不是主要问题;真正的问题是没有 exit logic 时,inventory 会把你拖死。
也就是说,这份 repo 的研究价值不是“已经可上线”,而是它把最该解决的失败点明牌写出来了。
---
在 OKX 上,作者先用:
tau = 100msT = 1s得到:
| target participation | threshold j | Net P&L | |---|---:|---:| | 0.5% | 0.0148% | -$134,138 | | 1% | 0.0122% | -$518,880 | | 5% | 0.0074% | -$43,734 | | 10% | 0.0055% | +$393,253 | | 20% | 0.0034% | +$471,709 |
这组结果说明:
在 OKX 上扫 tau:
| tau | Net P&L | Trades | |---|---:|---:| | 10ms | -$168,338 | 26,331 | | 50ms | -$192,390 | 26,462 | | 100ms | -$43,734 | 26,597 | | 500ms | +$125,136 | 25,763 | | 1s | +$57,690 | 25,782 | | 5s | +$382,660 | 22,657 | | 10s | +$254,259 | 21,781 |
这基本把 desk translation 说透了: 真正值得试的不是超短 10~100ms 噪音 OFI,而是 500ms ~ 5s 这种“持续性 aggressor pressure”。
在最优 tau = 5s 下,扫预测 horizon:
| horizon | Net P&L | Avg P&L / Trade | |---|---:|---:| | 1s | +$382,660 | +$16.89 | | 5s | -$284,294 | -$15.89 | | 10s | -$300,427 | -$16.04 | | 30s | -$156,212 | -$17.02 | | 60s | -$239,863 | -$18.74 |
核心结论非常直接: 原版信号的预测力几乎只活在最前面的极短一小段。
这就是为什么它适合被 desk 改写成:
1m 上形成 signal;3m / 5m 上做 sparse hold;在“golden config”下(tau=5s, T=1s, participation 15%):
| Exchange | Beta | Trades | Participation | Net P&L | |---|---:|---:|---:|---:| | OKX | 0.000023 | 75,513 | 12.59% | +$575,712 | | GATE_IO | 0.000032 | 84,462 | 14.08% | -$89,412 | | COINBASE | 0.000034 | 40,177 | 14.75% | -$150,631 | | DERIBIT | 0.000011 | 3,803 | 10.23% | -$5,629 | | BITSTAMP | 0.000057 | 614 | 14.91% | -$401,670 | | BINANCE | 0.000021 | 79,043 | 13.17% | +$7,119 |
这说明: 这条 alpha 明显有 venue-specific microstructure 依赖。
如果硬把 OKX 参数无脑平移到所有 venue,基本就是 overfit 自杀。
notebook 的 beta stability 分析显示:
所以这条线不是完全 statistical fluke; 但它要求:
低流动场景下,beta 会直接漂掉。
---
repo 自己已经把最危险的点写得很清楚。
OKX capped 版本:
也就是说: 赚了 57.6 万,但最大回撤 124.5 万。
这不是 production-ready,只能算“entry alpha 有东西,但持仓管理很烂”。
OKX capped vs uncapped:
| Metric | Capped | Uncapped | |---|---:|---:| | Executed trades | 75,513 | 90,000 | | Final inventory | 8.75 BTC | 643.06 BTC | | Net P&L | +575,712 | +785,718 | | Max Drawdown | -1.25M | -62.39M | | Fees | 9,679.71 | 13,777.01 |
这组数字的意义很简单: 别被更高的 net P&L 骗了;uncapped 版本本质上是拿方向性爆仓风险换出来的。
所以对 desk 而言,这篇材料最重要的 take-away 不是“OFI 好厉害”,而是:
> OFI entry 可以进研究池,但必须立刻和 inventory cap、timeout exit、re-entry cooldown 一起测。
---
1m / 3m / 5m 后,只有“极端那一层”还有点像样为了避免这轮变成纯 notebook 摘抄,我补了一版 公开可得的 desk-portability probe。
1m klinesBTCUSDT / ETHUSDT / SOLUSDT1m barimbalance_ratio = (2 * taker_buy_base_volume - total_volume) / total_volumez > threshold 做多z < -threshold 做空next 1m / 3m / 5m / 15m signed return> 这不是 trade-level OFI replication;它更像“公开 1m 数据能不能先看到影子”的 portability probe。
把三个标的合在一起看:
#### threshold = 1.5
#### threshold = 2.0
按单币看,在 threshold = 1.5 下:
说明三件事:
3m ~ 5m 仍能看到一点 continuation 影子。threshold = 2.0 时虽然样本变少,但 gross 才开始接近可讨论区间。threshold = 2.0 的 next-5m +3.99 bps gross 基本只是贴着 breakeven。所以,这条线更像:
---
这篇材料最容易被误读成:
更合理的 desk 读法其实是:
因为入场逻辑本身已经闭环:
为什么顶部字段我写“不可直接落地完整策略”? 因为它至少缺三件 production 必需品:
所以它当前更像: 清楚、可复现、值得继续 desk 化的 raw alpha 壳子。
1m / 3m / 5m / 15m 的映射也就是说: 别把它当 15m 主信号;把它当 1m 生成、3~5m 兑现的 microstructure impulse,更合理。
---
第一版建议:
BTC / ETH / SOL / BNB 起步tau = 1s / 3s / 5szscore window = 30 / 60|z| >= 2.0 时入场别用 repo 的“没反向就一直扛”。 第一版应该直接测:
1 / 3 / 5 bars5m|z| < 0.5 提前平至少做三档:
这条 alpha 的生死线基本不在信号,而在成本。
---
这条线最有价值的地方,在于它能补现有池子的一个底层层级:
cross-asset lead-lag OFI:看 leader 的 flow 去打 followerorder-book delta vote:看多源 microstructure 共振this digest:直接看单标的自身 extreme trade-flow continuation所以它不是前两篇的重复,而更像更底层的 building block:
> 先确认“自身流动性冲击有没有短延续”,再决定是否叠加跨资产 lead-lag、盘口结构或执行层 veto。
这对 desk 很重要,因为它能回答一句基础问题: 我们看到的 microstructure alpha,到底是“本币自身冲击”还是“跨币传播”的次级反应?
---
如果只带走一句话,我会带走这句:
别把 OFI 只放进 HFT 教科书;对 crypto short-cycle desk,更该先测的是「极端 trade-flow z-score 触发后的 3~5 分钟 continuation」这条最朴素的 microstructure raw alpha。
它的优点是:
1m / 3m / 5m desk 直接相连。它的现实约束也同样清楚:
所以它该进研究池,但应以: extreme-only + timeout exit + strict inventory cap + realistic cost ladder 继续推进,而不是把 notebook 原样当答案。
---
1s / 3s / 5s OFI 复现:只跑 BTC / ETH / SOL,不要一上来全市场。hold 1 / 3 / 5m、|z| 回落平仓、timeout exit 三套。|z| >= 2.0 / 2.5,不要让 active ratio 超过 3%~8%。---
research/quant_digests/2026-04-02_1140_extreme-ofi-tradeflow-continuation-alpha.md/reading/quant_digests/2026-04-02_1140_extreme-ofi-tradeflow-continuation-alpha.html