源文件:research/quant_digests/2026-04-03_0948_crypto-spike-reversion-binary-alpha.md
README.md + backend/services/strategies/crypto_spike_reversion.py + backend/services/strategies/reversion_helpers.py)short-horizon crypto price spike 之后,短时二元市场概率会对冲击方向过度定价;做反向一侧,赌其在几分钟内回归先回答 base alpha:这篇东西的 base alpha 很清楚,不是“预测市场平台故事”,而是“5m 级别的急涨急跌会让短到期 crypto 二元市场在几分钟内出现可反做的过度定价”,而且源码把 entry / exit / sizing / hold window 都写出来了。
这次重点看的是 2026 新仓库 braedonsaunders/homerun 里和 crypto 高频方向最相关的几部分:
README.mdbackend/services/strategies/crypto_spike_reversion.pybackend/services/strategies/reversion_helpers.py先说结论:这轮更值得 intake 的不是 README 里那句“38 strategies, 39 data sources”,而是源码里这条已经被写成完整规则壳的 Crypto Spike Reversion。
GitHub metadata 也给了它“新且活跃”的基本信号:
Crypto HF、Flash Crash Reversion、VPIN Toxicity 这些短周期方向列为内置策略家族5m spike fade raw alpha。FACTOR_BACKLOG.md 里还只是 SCOPED / PROTOTYPED 的 volume spike / volume recovery 方向——这次不是把它当确认层,而是把它提升为一条能独立下单的 raw alpha skeleton。这轮优先级应该先问:能不能直接写成完整策略?
这里答案是能,而且很直接:
5m 急涨/急跌;time-box 把持仓锁在几分钟,而不是把它拖成宏观判断。因为这条线能直接扩充:
mean reversion 原型池single-asset 原型池event / shock-driven 原型池binary wrapped crypto 这一类特殊执行容器的素材池而不是再写一层“这个条件也许可以 veto 那个 alpha”。
1m / 3m / 5m / 15m 的关系并不弱虽然源码主信号写成 move_5m,但它本质是:
所以这不是“只能做 5m”——而是 5m 是母信号,1m/3m/15m 是实验层的不同投影。
buy_no,急跌后偏向 buy_yes)5m impulse overshoot → binary-probability reversion|move_5m| 必须足够大5m 冲击必须相对 30m 趋势占主导2h 累积波动过大时不做take_profit / stop_loss / max_hold_minutescrypto_spike_reversion.py 的核心方向定义非常干净:
move_5m > 0,说明标的短时急涨,策略 买 NOmove_5m < 0,说明标的短时急跌,策略 买 YES翻成人话: 这条 alpha 的第一原则就是反做冲击。
默认参数里最重要的几条:
min_abs_move_5m = 1.8%max_abs_move_2h = 14.0%min_edge_percent = 2.8min_confidence = 0.44min_liquidity_usd = 2000max_entry_price = 0.92这套口径翻译过来就是:
这很适合我们先跑一个 honest baseline,因为它不是模糊的“等明显 spike”,而是已经给出可编码阈值。
reversion_helpers.py 里最关键的不是函数名字,而是这句关系:
> 只有当 |move_5m| >= 0.55 * |move_30m| 时,才算短时 impulse 足够主导。
再加上:
|move_2h| > 14%,就拒绝;require_reversion_shape=True,没有 shape 就不进场。翻成人话: 它不是见 spike 就反手,而是要求“这次冲击更像局部尖刺,而不是更大趋势的一部分”。
这条规则特别重要,因为它决定了这更像:
shock fade而不是:
源码里的 edge 近似是:
price_to_beat:edge ≈ 0.6 * |move_5m| + oracle_diff_pctedge ≈ 0.6 * |move_5m|net_edge_percent = edge - 0.25这不是 production 级成本模型,但对 intake 阶段有两个优点:
默认 exit:
take_profit_pct = 8.0stop_loss_pct = 4.0max_hold_minutes = 8.0这意味着作者没有把它写成“回归到收盘 / 回归到结算前”那种长拖尾逻辑, 而是明确承认:
> 这条 alpha 的生命很短,核心是快进快出,不是慢等均值。
这点对 short-cycle desk 很友好,因为它天然就是一条几分钟级别的 time-boxed raw alpha。
默认 sizing:
sizing_policy = kellykelly_fractional_scale = 0.45liquidity_cap_fraction = 0.07max_markets_per_event = 24这说明作者默认就把这条线当成“会同时出现多标的候选,需要容量约束”的东西来写。
对 desk 的启发是: 如果我们后面把它迁移到更传统的 perp / spot bar 策略,也别只抄 entry/exit,仓位分配和流动性上限也应该一起抄。
1m / 3m / 5m / 15m 的最小实验优先顺序建议是:
1m / 3m / 5m / 15mmove_5m / move_30m / move_2hmove_5mmove_30mmove_2h|move_5m| >= 1.8%|move_5m| >= 0.55 * |move_30m||move_2h| <= 14%liquidity >= 2000entry_price <= 0.92move_5m > 0 → 做反向move_5m < 0 → 做反向edge = 0.6 * |move_5m| + oracle_diff_pctnet_edge >= 2.8+8% take profit-4% stop loss8m time stop如果暂时不碰二元市场,先做一个传统交易所 proxy:
BTC/ETH/SOL 的 perp 或 spot-perp 合约selected_price 换成方向仓的入场价5m shock threshold30m shape gate2h regime cap8m / 15m time-box这样能先回答: 这个 alpha 是“只在预测市场容器里成立”,还是“底层冲击反转本身就有迁移性”。
move_15m / move_1h / move_4h 当作对应 shape 层级第一轮别上来就看 Sharpe,先看:
|move_5m|、move_30m、move_2h 分层shape gate。0.25,但至少承认成本存在;我们实测时必须做更诚实的成本拆解。如果今天只允许往池子里加 1 条新的 single-asset / shock-driven mean reversion 原型,我会收这条:
> 5m spike reversion × 30m shape gate × 8m time-box
原因不是它有多花哨,而是:
volume spike / recovery 这个 backlog 方向的独立 raw alpha 化版本。move_5m / 30m / 2h + 二元市场报价面板。1.8% shock + 0.55 shape gate + 8m hold。8%/4%/8m 固定壳 vs time-box + oracle-gap compression。Binance move features + binary market quotes + 8-minute post-entry reversion test