← All graded classics

ADX-Filtered Trend Rider

'Only trade when there IS a trend' — ADX above 25 as the permission slip.

F

The claim

Momentum entries lose money in chop, so gate them behind Wilder's ADX: only take the momentum signal when ADX(14) > 25 says a real trend exists.

Where it comes from

ADX is Wilder's (1978); 'ADX above 25 = trending market' is one of the most-repeated filters in trading education.

The exact rule we graded

Long on ROC(6) > +1.5%, short on ROC(6) < −1.5%, but only while ADX(14) > 25, on 1-hour candles. Exits: 3-ATR trailing stop, 100-bar time exit.

The honest verdict

FAILS the gate
Net expectancy
+10.7bp
OOS trades
4,235
Win rate
37.8%
Reward:risk
1.78
  • OOS net expectancy > 0
  • Clears the cost hurdle
  • Robust, not lucky
  • Survivable drawdown
  • Not overfit
Per-asset OOS expectancy
DOGE
+35.8bp
ETH
+20.5bp
XRP
+18.5bp
AVAX
+18.1bp
LINK
+13.4bp
BTC
+1.7bp
BNB
-1.5bp
SOL
-25.2bp
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

  • Compare directly with our unfiltered Rate-of-Change entry — the delta between the two grades is the honest measured value of the ADX filter.
The exact spec, as graded (JSON)
{
  "name": "ADX-Filtered Trend Rider",
  "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": "roc",
            "period": 6,
            "op": ">",
            "value": 1.5
          }
        ],
        "short": [
          {
            "indicator": "roc",
            "period": 6,
            "op": "<",
            "value": -1.5
          }
        ]
      },
      "exit": {
        "trail_atr": 3,
        "time_exit_bars": 100
      },
      "regime": {
        "adx_gt": 25
      }
    }
  ]
}

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