源文件:research/quant_digests/2026-03-25_1411_adaptive-maker-ofi-kalman-regime-skew.md
Kalman(mid) + imbalance 与 OFI / microprice / vol clustering 估计未来 100~500ms 的短期漂移,把这个 edge 直接映射成 skewed maker quotes;只有当未来漂移能覆盖 adverse selection 与费用时,双边做市才有净边> 先回答 base alpha:不是“挂双边等别人来打”这么空。base alpha 是:短期订单流与盘口结构会让未来几百毫秒的公平价格偏向某一边;如果你能把这个偏向及时体现在 reservation price、spread 宽度和 quote skew 里,maker 也能有 directional raw alpha,而不是纯手续费生意。
这轮主线不是再写一篇“OBI 很重要”的泛泛笔记,而是直接拆一份很新的完整策略仓库:
对当前 desk 来说,最值得偷的不是“它会做市”这件事,而是这套完整 raw alpha 骨架:
Kalman(mid) + α·imbalance 做 fair value;OFI + microprice deviation + vol clustering 判断 edge 朝哪边偏;reservation price + adaptive spread + inventory cap + one-sided quoting 把 edge 落成可执行报价;这和今天已经写过的 single-asset taker micro alpha 不一样:
fair value drift → skewed quotes → markout clean 这条完整 maker alpha 闭环。100ms horizon:r = 0.12,R² = 0.014,t = 3.41,p = 0.0007500ms horizon:r = 0.09,R² = 0.008,t = 2.61,p = 0.00911s 之后显著性明显衰减;5s 基本消失翻成人话:这不是 5m 慢因子,而是几百毫秒到 1 秒内衰减的 micro edge。
AdaptiveQuoteEngine:142 fills,fill rate 14.2%,P&L +0.31,Sharpe 1.823,MaxDD 0.089,WinRate 54.1%FixedSpreadMaker(±5):89 fills,P&L +0.18,Sharpe 0.941NaiveMaker(±0.5):201 fills,P&L -0.22,Sharpe -0.612这组数最重要的含义不是“做市稳赚”,而是:同样是 maker,是否把 signal / inventory / regime 写进报价,结果差很多。
100ms:平均 markout +0.0031500ms:平均 markout +0.00181s:平均 markout -0.0002+0.0479 USD / fill这点很关键,因为 maker 策略最常见的假繁荣就是“看起来吃到了 spread,实际上 fill 后 mid 马上朝反方向跑”。这个仓库至少把这件事单独拿出来验了。
entry:什么时候挂、往哪边 skew、挂多宽exit:何时只挂单边、何时触发 TP/库存回补sizing:inventory cap / fill qty / gross guardrisk:drawdown breaker / spread sanity / one-sided quotingcost:maker fee + markout + latency / queue 风险1m / 3m / 5m / 15m desk 的价值也很直接:1m / 3m 高强度执行型 raw alpha5m / 15m 主信号的 execution timing / maker-vs-taker 切换层fair_value = Kalman(mid) + α · imbalanceedge_score = w1·OFI + w2·microprice_dev + w3·vol_urgencyreservation = fair_value - inventory · γ · σ² · Timbalance > 0:tighten ask / widen bid(偏向卖给买方 aggressor)fill_qty|edge_score| / σ / spread_state 做 quote aggressiveness 分层max_inventory_btcmax_drawdown_usdmax/min_spread这份 repo 最有价值的一点,是 README 之外还能做 代码级 sanity check。
README 里写的是 textbook A-S 半价差: δ = γσ²T/2 + (1/γ) ln(1 + γ/k)
但仓库 quoting.py 实现的是: base_delta = γσ²T/2 + (1/k) ln(1 + γ/k)
这两者不是一回事。 在默认参数 γ=0.05, k=1.5, T=600 下:
0.65580.0219同时仓库还设了 min_half_spread = 0.5 USD。 我按代码把默认参数扫了一遍,得到一个很关键的 desk 结论:
sigma < ~0.1785 时,实际 half-spread 基本被 0.5 USD 的 floor 钉住;imbalance skewinventory pressurehigh-vol regime widen而不是一个由 A-S 理论项完全主导的连续最优 spread 模型。
这反而更符合 desk 现实:很多时候真正起作用的不是 textbook 闭式解,而是 floor、skew、inventory、throttle 这些“脏工程参数”。
1m / 3m: 可直接当独立 maker alpha / execution alpha5m / 15m: 更适合当 execution layer,而不是主 bar-close alpha原因很简单:仓库给出的 edge 有效窗口主要在 100ms ~ 500ms,到 1s 以后已经开始衰减。它不是天然 15m 主信号。
如果你已经有一个 5m 或 15m 主方向信号,这条 maker alpha 最值钱的用法可能是:
也就是:它既可以独立作为快节奏 alpha,也可以作为慢周期 alpha 的 execution veto / timing layer。
bookTicker + trade streams2~6 小时即可;先不用私有成交回报,也能先做信号预测与 paper fill 检验BTCUSDT / ETHUSDT / SOLUSDT2~6h 的 bookTicker + tradeimbalance / OFI / microprice_dev / relative_spreadOFI -> future mid return 回归(100ms / 500ms / 1s)r / t-stat / p-value(预测性)P&L / Sharpe / MaxDDfill rateavg markoutnet edge per fill15m 因子再宣称它是 bar alphaadaptive vs fixed vs naive 三组结果在本地自采数据上跑通。100ms/500ms markout 变负,就算 spread capture 看起来漂亮,也先判死。min_half_spread × gamma × k × sigma regime 网格,确认策略收益到底来自哪一层。1/k 不是刻意改写,修正后要重做全套 benchmark,避免对参数含义产生错觉。5m/15m 主信号,大概率会失真;更诚实的定位是 micro alpha / execution alpha。https://github.com/Aliipou/mm-livehttps://github.com/Aliipou/mm-live10.1080/14697680701381228https://doi.org/10.1080/1469768070138122810.1080/14697688.2018.1489139https://doi.org/10.1080/14697688.2018.1489139https://developers.binance.com/docs/binance-spot-api-docs/web-socket-streamshttps://developers.binance.com/docs/derivatives/usds-margined-futures/websocket-market-streamsreports/artifacts/quant_digests/mm_live_maker_alpha_20260325_1411/source_metrics.jsonreports/artifacts/quant_digests/mm_live_maker_alpha_20260325_1411/source_metrics.md