源文件:research/quant_digests/2026-04-12_1352_mm-live-ofi-fairvalue-maker-alpha.md
README.md + scripts/collect_and_test_edge.py + scripts/run_benchmark.py + src/mm_live/signals/fair_value.py + src/mm_live/signals/imbalance.py + src/mm_live/strategy/quoting.py + src/mm_live/research/imbalance_prediction.py + src/mm_live/research/benchmark.py)+ Binance live public-data probe(WebSocket depth@100ms + trade)fair_value = Kalman(mid) + α·imbalance 这条可检验的微观结构 alpha。> base alpha = 短时订单簿失衡会推动未来 mid 朝同方向再走一小段。
如果这句答不清,mm-live 最多只能算做市工程壳;但这轮 source audit 之后,我认为它的 base alpha 是清楚的:
src/mm_live/signals/imbalance.py 明确把信号定义成:raw = (bid_vol - ask_vol) / (bid_vol + ask_vol)src/mm_live/signals/fair_value.py 直接把 alpha 写进 fair value:fair_value = Kalman(mid) + imbalance_alpha * imbalancescripts/collect_and_test_edge.py 不是只打印故事,而是先采样,再回归检验 imbalance -> future return。翻成人话:
> 它赌的不是“长期趋势”,也不是“均线金叉”,而是 盘口里买盘比卖盘更厚时,接下来很短一段时间价格更容易继续往上挪一点;反之亦然。
这就是 raw alpha,本体非常明确。
GitHub API 元数据显示:
Aliipou/mm-live2026-03-232026-04-123虽然 star 不高,但这轮它比很多 launcher / README-only 仓库强得多,因为它有:
src/mm_live/ 下完整模块分层research/ 里的 edge test / benchmark / markout / stress testrisk/limits.py、execution/、feed/ 这些可审计源码tests/ 目录,不是只有截图和口号也就是说:
> 它不是“有人讲了一套故事”,而是“有人把信号、报价、风险、研究验证管线都写出来了”。
README 虽然强调 Avellaneda-Stoikov,但真正能给 desk 拿走的东西不是公式本身,而是这条拆法:
这比很多“直接回测做市收益曲线”的 repo 更诚实。
imbalance.py:alpha 本体很朴素,但定义够干净OrderFlowImbalance 的核心非常简单:
depth_levels=5 档;(bid_vol - ask_vol) / (bid_vol + ask_vol);ema_alpha=0.2 平滑;[-1, +1]。这点反而是优点。它没有一上来就堆复杂 ML,而是先回答:
> 盘口厚度偏向哪边,短时 drift 会不会跟着偏哪边?
这是 desk 最容易复现、最容易二次加工的一类 microstructure alpha。
fair_value.py:repo 最关键的一句其实是这个代码里直接写的是:
``python fair_value = Kalman(mid) + imbalance_alpha * imbalance ``
默认 imbalance_alpha = 2.0。翻成人话:
所以这里真正的研究价值不是“Kalman 好不好看”,而是:
> 把盘口失衡从纯解释变量,提升成真正参与定价的 fair-value shifter。
quoting.py:A-S 报价只是在给 alpha 找可执行外壳AdaptiveQuoteEngine 里核心结构是:
reservation = fair_value - inventory * gamma * sigma^2 * Tdelta = ...(A-S half spread)也就是说,repo 的交易层不是在重新发明 alpha,而是在做三件事:
这对我们 desk 的启发是:
> OFI 可以单独做 directional alpha,也可以只做 maker 价格偏移;两者不要混成一团。
research/imbalance_prediction.py:先统计检验,再谈 production这部分我很喜欢。它不是先讲 PnL,而是先做:
(timestamp, imbalance, mid)100ms / 500ms / 1s / 5s 做 future_return ~ imbalance 回归r / R² / t-stat / p-value / beta这跟很多 repo 最大的区别是:
> 它先问“信号有没有预测力”,再问“策略能不能赚”。
这很适合当前 desk 的 intake 节奏。
本地 artifacts:
/root/clawd/jerry/momentum/reports/artifacts/literature/mm_live_ofi_edge_probe_2026-04-12.csv/root/clawd/jerry/momentum/reports/artifacts/literature/mm_live_ofi_edge_probe_2026-04-12.json/root/clawd/jerry/momentum/reports/artifacts/literature/mm_live_benchmark_probe_2026-04-12.csv/root/clawd/jerry/momentum/reports/artifacts/literature/mm_live_benchmark_probe_2026-04-12.json我没有只停在 README,而是实际做了两步 live probe:
#### Probe A:repo 自带 OFI edge test 环境:
python scripts/collect_and_test_edge.py --duration 30 --symbol btcusdtbtcusdt@depth@100msbtcusdt@trade#### Probe B:repo 自带 strategy benchmark 运行:
python scripts/run_benchmark.py --n-ticks 1000 --symbol btcusdt比较三条线:
AdaptiveQuoteEngineFixedSpreadMakerNaiveMaker注意:
> 这不是交易所真实成交回报。它是 repo 自己定义的同口径 live tick + fill simulation benchmark,所以能说明“相对可行性”,不能直接当真钱表现。
30s 的 BTCUSDT live probe,完成样本约 1377 个。结果:
100ms: r ≈ +0.554, R² ≈ 0.307, t ≈ 24.66, p ≈ 1.75e-111500ms: r ≈ +0.644, R² ≈ 0.414, t ≈ 31.17, p ≈ 7.92e-1621s: r ≈ +0.536, R² ≈ 0.287, t ≈ 23.53, p ≈ 3.87e-1035s: r ≈ +0.479, R² ≈ 0.229, t ≈ 20.23, p ≈ 7.64e-80最强的是 500ms 这一档。
翻成人话:
> 在这次实时样本里,盘口失衡不是噪音,而是真会在接下来几百毫秒到几秒里继续推着 mid 往同方向走。
所以如果只问:
> OFI × fair value shift 这条 base alpha 存不存在?
我的答案是:存在,而且这次 public live probe 证据不弱。
1000 ticks live benchmark 的结果是:
FixedSpreadMaker:PnL ≈ -3.47, Sharpe ≈ -3881.82, 197 fillsAdaptiveQuoteEngine:PnL ≈ -5.33, Sharpe ≈ -4425.44, 373 fillsNaiveMaker:PnL ≈ -9.62, Sharpe ≈ -5092.36, 447 fillsrepo 自己也打印了:
> WARNING: Model underperforms baseline
这说明什么?
说明这次 probe 下:
AdaptiveQuoteEngine 的 spread 更窄(平均约 4.40 美元,对比 baseline 的 10.0),fill 更多,但短样本里 adverse selection / inventory path 可能更吃亏;所以这轮 4 个字段里,我把:
是否可独立复现 写 是是否可直接落地完整策略 写 否这是更诚实的写法。
1m / 3m / 5m / 15m 的关系是什么?它原始设计明显更偏:
所以它不是最自然的 15m 主信号。
更合理的 desk 读法是两层:
1m 以下的 raw alpha 母体也就是:
BTC / ETH / SOL 上是否稳定;1m/3m 的 admission / veto例如:
60s 的 OFI-EMA 是否与 1m bar close 方向一致;OFI 与 bar return 背离,则 veto 某些追价 continuation;OFI 与 microprice 同向极强,则允许更激进的 next-bar continuation / maker join。翻成人话:
> 这套东西更像给我们现有 1m/3m 书加一个“盘口同不同意”的 microstructure vote,而不是把它粗暴抬到 15m 上当主 alpha。
这 repo 最值得学的部分,其实有两层。
顺序应该是:
signal -> future return 统计检验signal -> fair value shiftfair value -> quote skew or directional entry这比直接“先画权益曲线”更适合我们现在的 intake 方式。
当前 repo 给我们的最好启发不是“照抄参数”,而是:
OFI / microprice / vol clustering 是 alpha 候选层A-S quote / inventory cap / drawdown breaker 是执行与风险壳这意味着后续我们完全可以:
1m/3m directional / router 实验里验证 alpha;depth@100ms、trade100ms 级别深度 + 实时成交最小复现并不需要整套做市系统,只需要:
depth@100ms + tradeimbalancemid[t]mid[t+100ms / 500ms / 1s / 5s]future_return ~ imbalance如果这一步都不成立,就没必要谈后面的 A-S 壳。
若我们不想先碰秒级撮合,可以先做:
100ms OFI 聚合到 1mmean/std/last/max OFI, microprice-mid, vol urgency1m/3m/5m mid 或 close return这就能和现有 short-cycle 研究栈对上。
> mm-live 最值得 intake 的不是做市公式,而是“先用 OFI 证明 very-short-horizon drift,再决定怎么交易它”这条研究路径;这次 live probe 里 alpha 本体成立,但默认 maker 壳还不该直接宣称可上线。
我建议下一步不要直接继续抠 A-S 参数,而是走这三步:
1m/3m/5m 降采样 portabilityBTCUSDT / ETHUSDT / SOLUSDTofi_ema_1sofi_ema_5smicroprice_devvol_urgency1m / 3m / 5m return sign 或 bps2 / 4 / 8 / 12 bps同一套 alpha,分别测试:
score > th 做多score < -th 做空这样才能知道:
> 是 alpha 本身强,还是只在 maker 壳里才有意义。
优先尝试把它挂到我们已有的:
做法是:
OFI 是否同向确认;这可能比“另开一套纯秒级 maker 系统”更快出 first verdict。
README.mdscripts/collect_and_test_edge.pyscripts/run_benchmark.pysrc/mm_live/signals/imbalance.pysrc/mm_live/signals/fair_value.pysrc/mm_live/strategy/quoting.pysrc/mm_live/research/imbalance_prediction.pysrc/mm_live/research/benchmark.pysrc/mm_live/strategy/cross_venue.pysrc/mm_live/risk/limits.py