源文件:research/quant_digests/2026-04-24_2043_er90-impulse-exhaustion-fade-alpha.md
README.md + strategies/er90.py + core/models.py + ml/base_strategy.py)5m(必要时退化到 1h)里最近 2h 的快速单边 impulse,再用 RSI(5) 极值、量能冲高回落、以及“不再创新高/新低”的 failure-to-extend 结构,去做下一段回归。这次看的是 GareBear99 (2024), Harvest — Multi-Timeframe Crypto Trading System 里的 strategies/er90.py。
这个仓表面上很像“多引擎 + 大量生产就绪文档”的整套交易系统,但对当前 desk 更值得单拎出来的,不是它的系统包装,而是里面这条相对少见、而且确实适合短周期实验的 ER-90 / Exhaustion Reversion 线。
它不是去追趋势,也不是单纯做 RSI 超买超卖;它真正想抓的是:
短时间内走得太急、成交量先冲后衰、而且价格已经开始“推不动了”的那一小段衰竭反转。
这比再补一个“EMA 对齐 + MACD 确认”的 trend 壳,更符合这轮你希望优先补的 mean reversion / raw alpha 方向。
这篇东西的 base alpha 是清楚的:
短时单边冲击后的衰竭回归(exhaustion reversion)。
翻成人话:
RSI(5) 顶到极端;所以它是标准的: single-asset / mean-reversion / exhaustion-fade raw alpha。
不是 overlay,不是纯 filter,也不是“用 RSI 解释行情”的附属模块。
er90.py 的文档字符串把信号写得很明确:
< 2h 内价格 impulse 达到 1.5~2.0 × ATRRSI(5) 极端也就是说,作者不是在做“便宜就买、贵了就空”的平庸反转,而是在找 冲刺末端。
真正值得 desk 注意的是:实现代码比口头描述更宽松。
在 core/models.py 里,默认参数已经被放松到:
er90_impulse_atr_min = 1.0er90_rsi_upper = 65er90_rsi_lower = 35er90_max_trades_per_day = 3而 er90.py 的实际 check_entry() 里,更关键的问题是:
impulsevolume_spiked / volume_decliningfailed_to_extend_high / low最终入场逻辑被简化成了:
rsi_signal > upper 且 rsi_1h > 50 → SHORTrsi_signal < lower 且 rsi_1h < 50 → LONG也就是说: 代码里的“真正可执行 alpha”已经退化成“短周期 RSI 极值 + 1h 同向背景”的反转壳;而 impulse / volume / failure-to-extend 更像是作者原本想保留、但暂时没有真正接上的 admission 层。
这点很重要,因为它决定了我们该怎么读这份材料:
尽管 entry 逻辑被简化了,风险层倒是写得相当完整:
默认配置(core/models.py)里:
10x ~ 20x0.25% ~ 0.5% equity0.8% ~ 1.2%0.6% ~ 0.9%13而 _calculate_execution_intent() 实际做的是:
这意味着它不是只有“信号点子”,而是已经把: entry / stop / tp / sizing / leverage safety 这一整套落地结构写出来了。
这轮你明确要求:如果能补 mean reversion / cross-sectional / relative value / stat-arb / pairs,就不要继续困在固定趋势形态里。
ER-90 值得进研究池,原因有四个:
最近 digest 已经连续有:
而 “冲高衰竭 / 冲低衰竭” 这种 impulse-end exhaustion fade,和普通 band-touch fade 不是一回事:
这两类信号在短周期里经常长得像,但交易分布、持仓时长和最怕的市场状态并不一样。
5m 主信号、1m/3m 子执行ER-90 的核心叙事就是:
5m 看最近 2h 是否发生过快冲刺;所以它非常适合:
5m 做 alpha 识别1m/3m 做 child execution / early exit / stop tightening这正好贴合你说的默认 desk 频段。
趋势策略最怕“追在末端”; ER-90 恰恰是去抓“末端已经开始推不动”的那一下。
所以它和现有 trend / breakout sleeve 有天然互补性:
这个仓对 desk 还有一个额外价值:
它提醒我们,很多 repo 的 README 讲的是完整版故事,但真正跑的代码只实现了其中一半。
这类材料不是没用,反而很适合我们这种 desk:
RSI(5) 极值 + 1h RSI 背景方向确认2h impulse / ATR + RSI5 极值 + volume spike-decay + failure-to-extend0.25%~0.5%0.8%~1.2% take-profit,对应 0.6%~0.9% stop;每日 loss / trade cap;杠杆安全缓冲5m 识别衰竭,1m/3m 执行进出与 tighter stop这条线最值得学的,不是“RSI 极值可以反手”,而是下面这句更精确的话:
不是所有极值都该反;更该反的是“刚冲完、量能开始掉、价格也推不出新极值”的那种极值。
把它拆开,其实是四层:
如果只保留第 2 层,策略就很容易变成“逆势硬接刀”; 如果把 1 / 3 / 4 层补齐,它就更像一个可交易的短周期 raw alpha。
在 liquid crypto perp 上,最近 2h 内发生过快单边 impulse 的 5m 片段里,如果再要求 RSI(5) 极值 + failure-to-extend,是否能形成 fee 后仍存活的 exhaustion reversion raw alpha。
BTCUSDT / ETHUSDT / SOLUSDT perp5m1m 或 3m90~180d24 根 5m(即 2h)内,净位移或极值位移达到 1.0 / 1.5 / 2.0 × ATR(14)RSI(5) > 65/70/75,且最近 2~3 根 K 没有继续创新高RSI(5) < 35/30/25,且最近 2~3 根 K 没有继续创新低TP 0.8~1.2% / SL 0.6~0.9%2 / 4 / 6 / 10 bps friction ladderBTC / ETH / SOL 是否风格一致RSI(5) 极值1h RSI 背景先确认最朴素可执行版本到底有没有 edge。
N × ATRTP/SL bracket因为 ER-90 的核心不一定是“大止盈”,更可能是“只吃第一段回归,快进快出”。
5m 成立,再往 3m/1m 压缩执行,而不是直接把 alpha 本体粗暴搬到 1m。er90.py 注释里写“85-92% win rate”,但这不能当作已验证事实。Harvest 里真正值得 desk 吸收的,不是 ER-90 那句“高胜率反转”口号,而是这条很适合 5m -> 1m/3m 最小实验的 raw alpha 骨架:先找短时冲刺,再找衰竭证据,最后只吃第一段回归。
strategies/er90.py (ER-90 / Exhaustion Reversion)