← 返回 Quant Digests · 站点首页

别把 mm-live 只读成“Avellaneda-Stoikov 做市框架”:对 short-cycle desk,更该先拆的是「OFI × Kalman fair value shift」这条 raw alpha,但整套 maker 壳还不能直接宣称过线

更新时间:2026-04-12 13:54 UTC 研究时间:2026-04-12 13:52 UTC 类型:2026 GitHub repo source audit(GitHub API metadata + `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`) 主题标签:raw-alpha/microstructure/order-flow/OFI/kalman/fair-value/market-making/avellaneda-stoikov/inventory-risk/binance/btcusdt/100ms/500ms/1s/5s/1m/3m/repo/live-public-data/cost/risk 证据类型:真实源码仓库 + 可运行 live edge test + live benchmark

源文件:research/quant_digests/2026-04-12_1352_mm-live-ofi-fairvalue-maker-alpha.md

1. 先把一句话说清楚:这篇东西的 base alpha 是什么?

> base alpha = 短时订单簿失衡会推动未来 mid 朝同方向再走一小段。

如果这句答不清,mm-live 最多只能算做市工程壳;但这轮 source audit 之后,我认为它的 base alpha 是清楚的:

翻成人话:

> 它赌的不是“长期趋势”,也不是“均线金叉”,而是 盘口里买盘比卖盘更厚时,接下来很短一段时间价格更容易继续往上挪一点;反之亦然。

这就是 raw alpha,本体非常明确。

2. 为什么这轮值得看它

2.1 它不是 README 驱动的假仓库

GitHub API 元数据显示:

虽然 star 不高,但这轮它比很多 launcher / README-only 仓库强得多,因为它有:

也就是说:

> 它不是“有人讲了一套故事”,而是“有人把信号、报价、风险、研究验证管线都写出来了”。

2.2 它更像“alpha 先验 + 做市壳”,不是单纯 textbook A-S

README 虽然强调 Avellaneda-Stoikov,但真正能给 desk 拿走的东西不是公式本身,而是这条拆法:

  1. 先证明短时 OFI 是否真的预测 future mid;
  2. 再把这个 edge 塞进 fair value;
  3. 再决定要不要把它变成 maker quote skew / directional filter / taker router。

这比很多“直接回测做市收益曲线”的 repo 更诚实。

3. repo 里最值得搬走的 4 个结构件

3.1 imbalance.py:alpha 本体很朴素,但定义够干净

OrderFlowImbalance 的核心非常简单:

这点反而是优点。它没有一上来就堆复杂 ML,而是先回答:

> 盘口厚度偏向哪边,短时 drift 会不会跟着偏哪边?

这是 desk 最容易复现、最容易二次加工的一类 microstructure alpha。

3.2 fair_value.py:repo 最关键的一句其实是这个

代码里直接写的是:

``python fair_value = Kalman(mid) + imbalance_alpha * imbalance ``

默认 imbalance_alpha = 2.0。翻成人话:

所以这里真正的研究价值不是“Kalman 好不好看”,而是:

> 把盘口失衡从纯解释变量,提升成真正参与定价的 fair-value shifter。

3.3 quoting.py:A-S 报价只是在给 alpha 找可执行外壳

AdaptiveQuoteEngine 里核心结构是:

也就是说,repo 的交易层不是在重新发明 alpha,而是在做三件事:

  1. 把 raw alpha 变成 reservation price 偏移
  2. 把库存风险压回去
  3. 把 quote spread 做成 state-dependent,而不是死宽度。

这对我们 desk 的启发是:

> OFI 可以单独做 directional alpha,也可以只做 maker 价格偏移;两者不要混成一团。

3.4 research/imbalance_prediction.py:先统计检验,再谈 production

这部分我很喜欢。它不是先讲 PnL,而是先做:

这跟很多 repo 最大的区别是:

> 它先问“信号有没有预测力”,再问“策略能不能赚”。

这很适合当前 desk 的 intake 节奏。

4. public live probe:alpha 本体是成立的,但完整 maker 壳暂时不能直接认领

本地 artifacts:

4.1 我怎么测的

我没有只停在 README,而是实际做了两步 live probe:

#### Probe A:repo 自带 OFI edge test 环境:

#### Probe B:repo 自带 strategy benchmark 运行:

比较三条线:

注意:

> 这不是交易所真实成交回报。它是 repo 自己定义的同口径 live tick + fill simulation benchmark,所以能说明“相对可行性”,不能直接当真钱表现。

4.2 好消息:OFI 的短时预测力在这次 live probe 里非常明显

30s 的 BTCUSDT live probe,完成样本约 1377 个。结果:

最强的是 500ms 这一档。

翻成人话:

> 在这次实时样本里,盘口失衡不是噪音,而是真会在接下来几百毫秒到几秒里继续推着 mid 往同方向走。

所以如果只问:

> OFI × fair value shift 这条 base alpha 存不存在?

我的答案是:存在,而且这次 public live probe 证据不弱。

4.3 坏消息:直接把它包成默认 maker 壳,这次短样本没跑赢 baseline

1000 ticks live benchmark 的结果是:

repo 自己也打印了:

> WARNING: Model underperforms baseline

这说明什么?

说明这次 probe 下:

  1. alpha 本体成立,不等于完整 maker 壳马上成立;
  2. AdaptiveQuoteEngine 的 spread 更窄(平均约 4.40 美元,对比 baseline 的 10.0),fill 更多,但短样本里 adverse selection / inventory path 可能更吃亏;
  3. 至少不能因为 README 好看,就直接把它当“可上线完整策略”打勾。

所以这轮 4 个字段里,我把:

这是更诚实的写法。

5. 这东西和我们 1m / 3m / 5m / 15m 的关系是什么?

它原始设计明显更偏:

所以它不是最自然的 15m 主信号。

更合理的 desk 读法是两层:

5.1 第一层:把它当 1m 以下的 raw alpha 母体

也就是:

5.2 第二层:把它降采样成 1m/3m 的 admission / veto

例如:

翻成人话:

> 这套东西更像给我们现有 1m/3m 书加一个“盘口同不同意”的 microstructure vote,而不是把它粗暴抬到 15m 上当主 alpha。

6. 这轮真正值得复用的,不只是信号,还有研究流程

这 repo 最值得学的部分,其实有两层。

6.1 先证明信号,再做策略

顺序应该是:

  1. signal -> future return 统计检验
  2. signal -> fair value shift
  3. fair value -> quote skew or directional entry
  4. 最后才看 PnL

这比直接“先画权益曲线”更适合我们现在的 intake 方式。

6.2 把 alpha 和壳拆开

当前 repo 给我们的最好启发不是“照抄参数”,而是:

这意味着后续我们完全可以:

7. 数据源、公开性、更新频率、最小可复现实验口径

7.1 数据源

7.2 最小可复现实验

最小复现并不需要整套做市系统,只需要:

  1. 实时订阅 depth@100ms + trade
  2. 维护 top-5 bid/ask depth
  3. 计算 imbalance
  4. 记录 mid[t]
  5. 回看 mid[t+100ms / 500ms / 1s / 5s]
  6. 跑 OLS:future_return ~ imbalance

如果这一步都不成立,就没必要谈后面的 A-S 壳。

7.3 对 desk 的最小迁移版本

若我们不想先碰秒级撮合,可以先做:

这就能和现有 short-cycle 研究栈对上。

8. 一句话结论

> mm-live 最值得 intake 的不是做市公式,而是“先用 OFI 证明 very-short-horizon drift,再决定怎么交易它”这条研究路径;这次 live probe 里 alpha 本体成立,但默认 maker 壳还不该直接宣称可上线。

9. 下一步怎么测

我建议下一步不要直接继续抠 A-S 参数,而是走这三步:

Step 1:做 1m/3m/5m 降采样 portability

Step 2:做两个壳的 honest 对照

同一套 alpha,分别测试:

  1. directional taker shell
  1. maker skew shell

这样才能知道:

> 是 alpha 本身强,还是只在 maker 壳里才有意义。

Step 3:把它当 shared microstructure veto 接回现有书

优先尝试把它挂到我们已有的:

做法是:

这可能比“另开一套纯秒级 maker 系统”更快出 first verdict。

10. 来源信息

主来源(repo)

repo 内引用的学术母体

本轮实际审计文件