← All graded classics

RSI 30/70 Mean Reversion

The first strategy every trader learns: buy oversold, sell overbought.

F

The claim

When RSI drops below 30 the asset is 'oversold' and due a bounce; above 70 it's 'overbought' and due a pullback. The most-taught entry signal in existence.

Where it comes from

J. Welles Wilder introduced RSI in 'New Concepts in Technical Trading Systems' (1978). The 30/70 thresholds became the textbook default and have been repeated in essentially every trading course since.

The exact rule we graded

Long while RSI(14) < 30, short while RSI(14) > 70, on 1-hour candles. Exits: 2% stop loss, 3% take profit, 48-bar time exit.

The honest verdict

FAILS the gate
Net expectancy
-19.8bp
OOS trades
4,629
Win rate
37.8%
Reward:risk
1.38
  • OOS net expectancy > 0
  • Clears the cost hurdle
  • Robust, not lucky
  • Survivable drawdown
  • Not overfit
Per-asset OOS expectancy
XRP
-6.8bp
SOL
-12.0bp
LINK
-16.0bp
BNB
-19.2bp
BTC
-20.5bp
DOGE
-23.5bp
ETH
-28.4bp
AVAX
-30.3bp
Permanent verification record →Verified — run on our engine + data

Live forward test

since 2026-07-11 — win or lose

The backtest above is history. Since publication, this exact spec also runs in our nightly forward-test harness (the same one behind /forward-tests): only trades entered after publication count, open positions are never force-closed, and the record publishes either way.

No closed forward trades recorded yet — the record accrues nightly as trades complete their full exit windows.

Honest port notes

  • Wilder wrote about divergences and failure swings, not naked threshold entries — but the naked 30/70 entry is what actually gets taught and traded, so that's what we graded.
  • Exit levels (2% stop / 3% target / 48-bar timeout) are our sensible defaults; the folklore version famously never specifies exits at all.
The exact spec, as graded (JSON)
{
  "name": "RSI 30/70 Mean Reversion",
  "universe": [
    "BTC/USDT:USDT",
    "ETH/USDT:USDT",
    "SOL/USDT:USDT",
    "BNB/USDT:USDT",
    "XRP/USDT:USDT",
    "DOGE/USDT:USDT",
    "LINK/USDT:USDT",
    "AVAX/USDT:USDT"
  ],
  "risk": {
    "risk_per_trade_pct": 1,
    "leverage_cap": 3,
    "max_daily_loss_pct": 5,
    "max_dd_halt_pct": 25
  },
  "sleeves": [
    {
      "name": "main",
      "timeframe": "1h",
      "entry": {
        "type": "rule",
        "logic": "all",
        "long": [
          {
            "indicator": "rsi",
            "period": 14,
            "op": "<",
            "value": 30
          }
        ],
        "short": [
          {
            "indicator": "rsi",
            "period": 14,
            "op": ">",
            "value": 70
          }
        ]
      },
      "exit": {
        "stop_loss_pct": 2,
        "take_profit_pct": 3,
        "time_exit_bars": 48
      }
    }
  ]
}

Every strategy graded on identical terms: 1-hour candles, 8 liquid USDT perpetuals (BTC, ETH, SOL, BNB, XRP, DOGE, LINK, AVAX), ~6 years of data with a chronological train/test split, real cost hurdle, 1% risk-per-trade sizing, 3x leverage cap. All numbers are out-of-sample (test window only).

Run YOUR version of this strategy
Different thresholds, timeframe, or filter? Paste your exact rules or code and see if your variant survives the same gates.
Grade it free →

A Grade is a historical, out-of-sample statistical measurement — not investment advice, a prediction, or a guarantee. Most strategies fail; a passing grade can stop working as markets change. Risk disclosure