On this page
ADX is the most misused indicator in crypto, because people try to trade it directly. It doesn't tell you *which way* price is going β only *how strongly* it's trending. That makes ADX a brilliant filter and a terrible standalone signal. Its real power is deciding *which other strategy is allowed to run*: trend-followers want high ADX, mean-reverters want low ADX. Backtesting is how you prove the filter actually adds value instead of just removing trades.
Step 1: use ADX as a switch, not a signal
A complete strategy answers four questions β entry, exit, risk, and regime. ADX belongs to the fourth. The idea: combine it with a directional system and let ADX gate when that system trades.
For a trend-following pairing, that means: a directional entry (say a moving-average crossover), gated by ADX above a threshold (commonly 20β25) so you only take trend signals when a trend actually exists. The exit and stop come from the directional system. The single most valuable thing ADX does is keep a trend-follower flat during the chop that would otherwise chew it up with whipsaws.
Step 2: get clean historical data
Your backtest is only as honest as its data. Use real OHLCV candles for the exact symbol, timeframe, and exchange you'll trade, over a window spanning a trend, a range, and a crash. ADX's whole value is regime separation, so you must test it across multiple regimes β on a single clean trend it will look like it does nothing, because there was no chop for it to filter out.
Step 3: measure what the filter changes
The honest way to judge an ADX filter is to backtest the directional system with and without it and compare. Read maximum drawdown, the Sharpe ratio, profit factor, and trade count. A good filter usually cuts the trade count substantially while raising Sharpe and shrinking drawdown β fewer, better trades. If ADX removes half your trades and barely moves the risk-adjusted metrics, it isn't earning its place.
Here is a moving-average crossover gated by ADX trend strength:
strategy:
name: ma_cross_adx_filter
indicators:
- { id: ema_fast, kind: EMA, period: 12 }
- { id: ema_slow, kind: EMA, period: 26 }
- { id: adx, kind: ADX, period: 14 }
rules:
entry:
all:
- { type: above, left: adx, right: 25 } # trend exists
- { type: crosses_above, left: ema_fast, right: ema_slow }
exit:
any:
- { type: crosses_below, left: ema_fast, right: ema_slow }
risk:
size_pct: 0.5
stop_loss_atr: 2.0Step 4: the test that actually matters β walk-forward
The ADX threshold is a parameter, and parameters are where overfitting hides. Tune "ADX above 25" against your full history and you'll find the one threshold that flatters the past. Walk-forward optimization tunes the threshold on one window and tests it on the *next* window the optimizer never saw, then rolls forward. If 25 only worked because you hand-picked it, walk-forward exposes it; if a trend filter genuinely helps across unseen data, the improvement persists.
This is where the overfitting check matters. A filter should make a strategy more robust, not just prettier in-sample β and walk-forward is how you tell the difference.
Do it in Noon Barbari
You can build the filter without code. Add ADX and your directional indicators from the library, wire the gate in the visual designer, and run the backtest with and without the filter to see exactly what it changes. Then run walk-forward to confirm the threshold is real, not noise. The free tier covers one full strategy end to end β enough to prove your ADX filter earns its keep.
Try it on your own data
Every concept above is implemented in the platform. Backtest, walk-forward, paper-trade, then promote to live β same rule set, all stages.