← All graded classics

Stochastic 20/80 Reversion

George Lane's oscillator, traded the way every textbook says to.

F

The claim

Stochastic %K under 20 means oversold, over 80 means overbought. Predates RSI and is taught nearly as often.

Where it comes from

George Lane popularized the stochastic oscillator in the 1950s. The 20/80 thresholds are the standard textbook setting.

The exact rule we graded

Long while %K(14) < 20, short while %K(14) > 80, on 1-hour candles. Exits: 2.5% stop, 3% target, 48-bar time exit.

The honest verdict

FAILS the gate
Net expectancy
-13.5bp
OOS trades
9,313
Win rate
44.3%
Reward:risk
1.13
  • OOS net expectancy > 0
  • Clears the cost hurdle
  • Robust, not lucky
  • Survivable drawdown
  • Not overfit
Per-asset OOS expectancy
ETH
-5.3bp
BTC
-9.4bp
AVAX
-10.5bp
SOL
-11.6bp
LINK
-14.9bp
DOGE
-16.7bp
XRP
-18.5bp
BNB
-20.1bp
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

  • Lane's full method wanted %K/%D crossovers plus divergence; the threshold version is what the textbooks reduced it to, and it's what we graded.
The exact spec, as graded (JSON)
{
  "name": "Stochastic 20/80 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": "stoch",
            "period": 14,
            "op": "<",
            "value": 20
          }
        ],
        "short": [
          {
            "indicator": "stoch",
            "period": 14,
            "op": ">",
            "value": 80
          }
        ]
      },
      "exit": {
        "stop_loss_pct": 2.5,
        "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