源文件:research/quant_digests/2026-04-01_1548_obi-microprice-highthreshold-alpha.md
README.md + train_ultimate_model.py + test_ultimate_backtest.py + src/processors/improved_features.py + collect_week_data.py + GitHub API metadata)这次主材料不是论文,而是一份 2025-10-18 创建 的 GitHub 新仓库:vinay2209 (2025), _hft-order-imbalance-trading_。repo headline 很容易让人把它读成“又一个 HFT + ML demo”,但对我们 desk 真正更值得 intake 的,不是它的 AUC headline,而是它已经写得很清楚的那条 盘口失衡 directional raw alpha:
翻成人话: 它不是在赌“ML 会神奇赚钱”,而是在赌“当盘口压力明显偏向一边时,后面会有一个足够大的极短周期同向漂移”。
这是一条很标准的 raw alpha,只是当前 repo 也很诚实地告诉你:alpha 存在,不等于 taker after-cost 能活。
base alpha 不是 LightGBM,也不是 AUC。
它的 alpha 本体是:
也就是: 盘口失衡 + microprice lead → 极短周期方向延续。
所以它是:
raw alphamicrostructuredirectional continuation最近我们已经补过不少:pairs、carry、cross-sectional、breakout、liquidity overlay、maker OBI。当前还值得继续扩的,是更快、更脏、但能直接扩张素材池的 fast alpha。这份 repo 值得进池,原因有三条:
2025-10-18T17:52:35Z,pushed 2025-10-18T17:59:43ZREADME.mdtrain_ultimate_model.pytest_ultimate_backtest.pysrc/processors/improved_features.pycollect_week_data.pycollect_week_data.py 里,repo 直接从 Binance order book stream 抓:
BTCUSDTETHUSDTBNBUSDTSOLUSDT并且设定:
depth=10这说明它的原始 alpha 不是 K 线级别,而是盘口更新级 / event-time 级别。
improved_features.py 里最关键的几类特征有:
obi 与 weighted_obi5/10/20/50/100)diff(5/10/20/50))volume_imbalancespread_bpsmicroprice_signal这里最该拿走的不是“用了很多 feature”,而是它其实已经把 alpha 拆得很白:
repo 的 target 不是随便预测下一跳方向,而是先把成本写进去:
4 bps2 bps6 bps5 bps所以 target_profitable_50 的意思不是“50 步后涨没涨”,而是: 50 步后,是否涨到足够覆盖 6 bps 成本,再额外留出 5 bps 盈利空间。
这点非常重要,因为它把 raw alpha 从一开始就放进了成本语境里,而不是先做一个没法交易的 classification demo。
train_ultimate_model.py 的问题本质上是:
> 给定当前盘口失衡、microprice、spread、波动率、量能状态,未来极短一段时间里,是否会出现足够大的同向价格漂移?
这比“未来涨跌方向预测”更接近真实交易问题。
README.md 直接写了四个最重要的数据点:
这个组合很关键,因为它直接说明: 分类质量不错,不代表策略 after-cost 能活。
repo 还给了一个很值钱的事实:
翻成人话: 这不是一条可以频繁随便打的 alpha,而是必须高阈值筛选、机会本来就稀少的 fast alpha。
README.md 的直白结论:
50–100ms<1ms也就是说,即使你方向判断是对的,机会窗口也可能在你下单前就没了。
collect_week_data.py 和训练脚本给出的口径:
3.75M 样本70/15/15这至少说明它不是拿几千条样本硬讲故事。
如果照 headline 去抄,你很容易把注意力放在:
但对当前 desk,更值钱的读法是:
1m/3m maker-biased directional admission,或者 5m 策略的微结构确认层。换句话说: 这轮真正值得 intake 的,不是“复制 repo 的 HFT 系统”,而是“盘口失衡 fast alpha 存在,但只在高 admission bar + 低成本执行下才可能留边”。
这条必须写清楚,不然会把 raw alpha 和完整策略混在一起。
test_ultimate_backtest.py 至少有三个问题:
sample(frac=0.1) 再按时间排序,等于把原本连续盘口序列打散后重拼;ETH 单一合约;holding_time = i - self.get_last_buy_index() 这里拿“trade list 索引”近似“数据行索引”,持有时长口径并不干净。所以: 这份 repo 足够支撑“alpha existence / desk framing”,但还不够支撑“直接照抄回测收益”。
回测里用的是:
1 bp1 bp2 bps但 README 总结里同时强调:
2 bps所以它已经很明确地把自己限定在: 只有 execution 足够强时,这条 raw alpha 才可能从“存在”变成“可交易”。
1m / 3m / 5m / 15m 的 desk 化映射repo 的 native target 是 10/20/50/100 个盘口更新步,而不是 5m/15m bar。也就是说:
seconds / tens-of-seconds 的 event-time alpha;15m trend desk 设计的东西。但这不代表它对我们没用,反而意味着: 更合理的迁移方式,是把它当成 fast layer,服务 1m/3m 主交易或 5m admission。
1m first-pass:先测 alpha existence第一刀建议先做:
BTC/ETH/SOL/BNB1m 聚合出:1m 或 3m 收益是否超过 4/6/8 bps这是最接近 repo 原始思想,又能在 desk 上最小复现的一步。
3m second-pass:更像实际可交易口径如果 1m 上方向性存在,但噪音太大,就把同一组特征降采样到 3m:
3m 通常比 5m/15m 更像“还能保留 microstructure 信息”的上限;5m/15m 不该直接照搬成主 signal到了 5m/15m,盘口失衡的边际信息会被大幅冲淡。更合理的做法通常不是:
5m/15m 主 alpha,而是:
5m breakout / momentum / mean-reversion 的 entry veto / confirmation;所以对我们当前 desk,这条 raw alpha 与 5m/15m 的关系是: 更适合作为 fast sleeve 或微结构 admission,而不是直接替代主频 alpha。
1m 计算:OBI_z 足够高;microprice_gap 同向;spread 未显著放宽;realized vol 没进入极端噪音区;才允许做多;做空同理。
第一版先别复杂化:
1/3/5 根 1m bar;microprice_gap 回到 0 附近平。这类 alpha 不适合“越有信号越梭哈”。第一版先:
至少要有:
2/4/6/8/10 bps after-cost,而不是只看 gross。1m OBI directional existence check1m / 3m 收益是否超过 4/6/8 bps固定同一口径,只比较:
这个实验很关键,因为它能直接回答: 真正有贡献的是失衡本身、领先价、还是成本门控。
同一信号,同一持有期,只改:
2 bps4 bps6 bps8 bps10 bps并对比:
要回答的问题是: 这条 alpha 是“信号强但执行要求太高”,还是“信号本身就不够”。
建议按这个顺序走:
1m -> 3m 的 OBI / microprice 最小实验,不要一上来就迷信模型复杂度。1m/3m 只有 maker-biased 才活,就把它明确定位成 fast sleeve / execution admission。1m/3m 的 after-cost 版本已经活下来时,才值得讨论往 5m 主策略里并进去做确认层。这份 2025 repo 真正值得 short-cycle desk intake 的,不是“0.8658 AUC 的 HFT 模型”这个 headline,而是更朴素也更诚实的结论:
多窗口 OBI × microprice 的 fast directional raw alpha 确实存在,但它天然是“高阈值、低频机会、强执行依赖”的东西;先把它当 1m/3m maker-biased alpha existence card 来测,不要直接伪装成 5m/15m 主信号。