源文件:research/quant_digests/2026-04-13_1523_spreadshock-imbalance-completion-mr-alpha.md
README.md + vortexbar_lab.py + ob_poc_v4.py + bundled PDF report)当盘口价差突然拉宽、且最近几根里主动吃单持续单边时,最值得先测的不是继续追同向,而是等“事件接近走完”后做短持有反转;更直白地说,就是 adverse-selection completion 后的 microstructure mean reversion这轮主看的是 GitHub 新仓库 Woonggyu Lee / btc-perp-microstructure (2026)。
它表面上的读法很容易变成:
> “又一个 order-book / LightGBM / microstructure 研究仓库。”
但对我们 desk,更值得先 intake 的不是“又多了一个微观结构看板”,而是这条跟现有 continuation 系材料不完全同向的 raw alpha:
> base alpha = 当市场制造商因为信息不对称而把 spread 拉宽、且主动成交方向已经持续偏一边时,短窗口里更值得押注“事件完成后的回摆”,而不是继续追最后一脚。
翻成人话:
domain score 只是把这类“值得反打”的微观状态再细分得更连续、更可筛选。所以这轮它是:
raw alphafilterregime> 这份 repo 最值得复现的,不是“预测下一跳继续同向”,而是“spread shock + 单边吃单持续”之后的短持有反转 raw alpha;它补的是我们当前素材池里较少被单独拆开的 adverse-selection completion -> fade 分支。
> README / 源码把逻辑写得很清楚:价格方向本身几乎像随机游走(README 报 AC1 ≈ 0.003),但什么时候容易出现可交易的短回摆是可筛选的;repo 报告里,RT3 触发器 8-fold walk-forward 的平均 Spearman 为 0.133,Domain Score 16-fold 全部为正,方向正确率 59.7%,再加 trailing 200-event rolling-Spearman 质量过滤后,Spearman 从 0.130 提到 0.212,覆盖约 61% 事件。注意:这些是 repo 自报结果,默认理解为未计入真实 taker/maker 成本的研究证据。
这题最关键的是先把 base alpha 说清楚。
vortexbar_lab.py 里的 compute_rt3_trigger(...) 做了两件事:
spread_pct:当前 spread 在最近一段历史里处在什么分位数。spread_window = 500spread_pct_on = 0.80imb_consistency:最近 K 根里,主动买卖是不是大部分朝同一边。imb_consistency_on = 0.75K=8代码里先识别 “近期发生过 spread shock + 当前单边吃单还很一致” 的状态,再构出 entry_direction。但 README 明确说得很重要:
> 最强信号不是继续同向追,而是事件接近完成后的短期 mean reversion。
也就是说,真正该拿来做 raw alpha 的,不是“RT3 ON 就顺着吃单方向追”,而是:
> 把 RT3 / Domain Score 当作“过热完成”检测器,然后做与主导 taker imbalance 相反方向的短持有反打。
ob_poc_v4.py 里还有一层更适合 desk 直接开测的定义:
grid_interval_sec = 60max_hold_bars = 15compute_variable_target_vec(...):taker_imb 方向max_hold_bars 强平翻成人话:
> 入场方向 = 反着当前一分钟的单边吃单;出场 = 等失衡方向翻回去,或者最多拿 15 分钟。
这已经不是“抽象研究结论”,而是很接近一条可以写成回测函数的短周期 raw alpha。
源码里 rt3_on 的核心条件非常朴素:
K 根里,taker imbalance 的方向高度一致这更像在抓:
> “单边主动单已经把做市商打得不愿意继续报紧 spread 了。”
对于 desk,这个状态本身就很值钱,因为它天然对应:
compute_domain_score(...) 把 6 个组件加总成 0~6 左右的连续分数:
翻成人话:
> 它不是在问“会不会涨”,而是在问:“这更像一段该反打的拥挤尾声,还是一段还没走完的真趋势?”
README 给出的单调关系也支持这个读法:
score 0 附近接近随机score >= 4 时 mean-reversion 强度明显更高这类分数对我们 desk 的好处是:
score >= q 才开)但要强调:
> 这轮主 digest 还是 raw alpha 本体:score 高时做反打;不是把它降级成 shared overlay。
我们这段时间已经积了不少:
这份材料的不同点在于:
> 它更像 continuation 分支的反面兄弟:不是看“单边流刚开始时顺着走”,而是看“单边流已经把 spread 打宽、并且趋于完成时反着做”。
所以它跟现有池子的关系不是重复,而是:
start-vs-end router也就是:
这轮我也刻意卡了一下自己:
> 它为什么比继续补 raw alpha 更值得?
答案是:因为它本身就是 raw alpha,而且是跟我们现有 microstructure continuation 池明显不同相位的一支。
更具体地说,它有三个优点:
spread-shock + sustained imbalance -> short-horizon fade1m / 3m / 5m / 15m 怎么映射这一题对 short-cycle desk 的好处,是它并不只活在亚秒级。
1m:最自然的第一落点ob_poc_v4.py 默认就是:
grid_interval_sec = 60max_hold_bars = 15所以最自然的第一版不是硬上 100ms 高频执行,而是:
taker_imbdomain_score >= threshold 时1/3/5/15 分钟 time stop这对我们很友好,因为直接就是分钟级回测。
3m:很适合作为 fast-but-not-HFT 版本如果 1m 太噪,第二步最应该测的是:
3 x 1m 聚合 imbalance sign / score1~3 个 3m bar这相当于把“尾声拥挤”再确认一层,减少单分钟假信号。
5m / 15m:更像事件桶,而不是机械压缩成普通 candle alpha这题若直接压成普通 5m/15m OHLCV,信息会损失很多,所以更好的做法是:
1m 生成 event log5m / 15m 的:聚成 slower-book 的输入
也就是说:
1m / 3m5m / 15m 更像事件聚合版或 admission layer这点要说清楚,别把它伪装成“一根 15m K 就能还原”的东西。
公开可得,不需要私有 feed:
aggTrades先别一步到位复刻作者 5.4B ticks 全年样本,最小版可以这样:
BTCUSDT perpetual1m 网格spread_pct >= 80%(rolling percentile)imb_consistency >= 0.75domain_score >= q90 或 >= 4side = -sign(taker_imb)1m / 3m / 5m / 15m time-stop sweep2 / 4 / 6 / 8 bps per side1m->3m 是否真的最强,还是只是一分钟噪音1–3 bars 最强 MR,先验证这点先把这个点钉住:
> base alpha 说得清:就是“单边挤压尾声 -> 短回摆”。
所以它不是那种“只能服务别的书”的材料。
我不愿意把“是否可直接落地完整策略”写成“是”,原因也很简单:
所以对 desk 的正确姿势是:
> 把它收进 raw alpha 素材池,优先做 first-cost verdict;不要因为 README 漂亮就直接把它当 ready-to-trade。
如果后面这条线成立,它最有价值的用法未必是孤立跑一本新策略,而可能是:
这对当前 desk 是非常实用的结构增量。
按优先级,我建议直接这样排:
1m event-studyspread shock + imbalance consistency -> opposite-side fade1/3/5/15m 持有收益曲线Domain Score 分层score 0~6 分桶Asia / Europe / US2/4/6/8 bps1m vs 3m10.1016/0304-405X(85)90044-3.10.2307/2999632.> 这份 2026 repo 最值得先收进研究池的,不是“又一个 order-flow dashboard”,而是 spread-shock completion × imbalance-consistency fade 这条 microstructure mean-reversion raw alpha。它最适合先在 1m / 3m 做 first verdict;若成立,再把 5m / 15m 做成事件聚合版或 router 组件。