4.8 KiB
Research: RSI(2) Mean Reversion Oversold Bounce
Date: 2026-04-15 Mode: autonomous
Summary
Larry Connors' 2-period RSI mean-reversion strategy surfaces stocks in uptrends (price above 200-day SMA) that have pulled back sharply enough to register RSI(2) < 10. The 200-day SMA filter is the critical guard against catching falling knives — without it, the plain RSI < 30 rule fails in persistent downtrends. Academic evidence from Lehmann (1990) and Alpha Architect confirms weekly losers revert at 0.86–1.24% per week, with contrarian strategies generating >2% per month in abnormal returns. This is the only contrarian signal not represented anywhere in the current momentum-heavy pipeline.
Sources Reviewed
- QuantifiedStrategies (search results): RSI(2) strategy with 75–79% win rate over 25-year backtest (2000–2025); lower RSI at entry → higher subsequent returns; profit factor ≈ 2.08 at best settings.
- Medium / FMZQuant — Larry Connors RSI2: Exact rule: price above 200d SMA AND RSI(2) < 10 → buy; exit when RSI(2) > 90. Tested on DIA and individual equities. Described as "fairly aggressive short-term" with entry on close.
- StockCharts ChartSchool — RSI(2): Entry RSI(2) ≤ 5 (aggressive) or ≤ 10; exit on move above 5-day SMA or RSI(2) > 90. Volume filter: 20-day avg volume > 40k. Warns: "RSI(2) can remain oversold a long time in a bear" → SMA200 filter mandatory.
- Alpha Architect — Short-Term Return Reversal (Lehmann 1990): Weekly losers generate +0.86% to +1.24% per week in the subsequent week; contrarian strategies (buy losers, sell winners) produce >2%/month abnormal returns. Effect is strongest for liquid, actively-traded stocks.
- Alpha Architect — Combining Reversals + Momentum: Reversal and momentum coexist at the 1-month horizon — reversal is dominant among low-turnover stocks, momentum among high-turnover. Filtering to high-liquidity names (min avg volume) reduces noise.
- WebSearch aggregate: Connors 25-year backtest CAGR 8.2%, max drawdown 16%; performance degrades in prolonged bear markets (2008, Mar 2020) — SMA200 filter critical; best results when SPY itself is not in freefall.
Cross-Reference: Existing Pipeline
- No existing mean-reversion scanner. All current scanners (minervini, high_52w_breakout, technical_breakout, obv_divergence, short_squeeze, insider_buying, options_flow, earnings_beat) are momentum- or event-driven. The RSI oversold bounce is fully orthogonal.
- technical_breakout (scanners/technical_breakout.md): targets resistance breakouts, opposite signal direction. No overlap.
- obv_divergence: detects flat price + rising OBV (accumulation). Partial overlap in that both can flag a beaten-down stock, but OBV divergence requires volume evidence of buying; RSI oversold can fire on pure price action.
- No prior research file on mean reversion or RSI.
Fit Evaluation
| Dimension | Score | Notes |
|---|---|---|
| Data availability | ✅ | yfinance OHLCV + download_ohlcv_cached fully integrated; RSI(2) computable from close prices, 200d SMA from same data |
| Complexity | trivial/moderate | RSI(2) is a 6-line calculation; same code pattern as high_52w_breakout which already uses download_ohlcv_cached |
| Signal uniqueness | low overlap | Only contrarian scanner in the entire pipeline; orthogonal to all momentum signals |
| Evidence quality | backtested | Connors 25-year backtest, 75–79% win rate; Lehmann (1990) academic paper; Alpha Architect reversal review |
All four auto-implement thresholds pass → implement.
Recommendation
Implement — Pipeline gap: zero mean-reversion coverage. RSI(2) with SMA200 trend
filter is one of the most replicated mean-reversion signals in quant literature, data
is fully available, and implementation is trivial following the high_52w_breakout
template. Expected holding period: 3–7 days (exit when RSI(2) > 90 or closes above
5-day SMA).
Proposed Scanner Spec
- Scanner name:
rsi_oversold - Data source:
tradingagents/dataflows/data_cache/ohlcv_cache.pyviadownload_ohlcv_cached(same ashigh_52w_breakout) - Signal logic:
- Load 1-year OHLCV for full universe
- Compute RSI(2) from last 3 closes: avg_gain/avg_loss over 2 periods
- Compute 200-day SMA from close series
- Filter: price > 200d SMA (uptrend guard) AND RSI(2) <
max_rsi(default 10) AND close >min_price(default $5) AND avg_vol_20d >min_avg_volume(default 100k) - Sort by RSI(2) ascending (most oversold first)
- Priority rules:
- CRITICAL if RSI(2) < 5 (extreme oversold, highest expected bounce)
- HIGH if RSI(2) < 8
- MEDIUM if RSI(2) < 10
- Context format:
"RSI(2) oversold at {rsi:.1f} | Price ${price:.2f} above 200d SMA ${sma200:.2f} (+{pct:.1f}%) | 3–7d mean-reversion bounce setup"