ADX (Average Directional Index) tells you how strong the current trend is — not which direction it is going. It solves the most common problem in technical analysis: entering a trend-following indicator signal in a market that is actually ranging.
Section 1: Core Mechanics
ADX is part of the Directional Movement System developed by J. Welles Wilder in 1978. It always moves between 0 and 100. Rising ADX = trend getting stronger. Falling ADX = trend weakening. ADX does not tell you if the trend is up or down — only how strong it is.
The system comes with two companion lines: +DI (Positive Directional Indicator) and -DI (Negative Directional Indicator) that show direction. ADX shows strength.
Formula
Directional Movement:
True Range and Directional Indicators:
Directional Index and ADX:
Where Wilder smoothing uses (heavier than standard EMA) and requires a seed of N bars before producing valid values.
Inputs
- High: Bar high price
- Low: Bar low price
- Close: Previous close for True Range calculation
- Period (N): Smoothing period for all Wilder calculations. Default: 14.
Parameters
| Parameter | Default | Range | Impact |
|---|---|---|---|
| Period (N) | 14 | 7–30 | Lower = more sensitive, noisier ADX. Higher = slower to confirm trend. |
Output
Three series: ADX (0-100), +DI (0-100), -DI (0-100). All plotted in a separate sub-panel below price. ADX is typically the thicker line; +DI and -DI are thinner.
Visual Behavior
- ADX rising from below 20 toward 25 = trend building
- ADX above 25 and rising = strong trend — trend-following strategies are valid
- ADX above 40 = very strong trend (less common, often near exhaustion)
- ADX falling from above 25 = trend weakening, watch for reversal or consolidation
- +DI above -DI = upward directional movement dominant
- -DI above +DI = downward directional movement dominant
Section 2: Interpretation & Signals
ADX Strength Levels
| ADX Reading | Interpretation | Strategy Implication |
|---|---|---|
| Below 20 | No trend / ranging | Avoid trend-following strategies; use mean-reversion |
| 20 to 25 | Weak trend / possible breakout | Use cautiously — wait for ADX to confirm above 25 |
| 25 to 40 | Trending — valid trend-following zone | Trade trend signals: EMA crossovers, MACD, Supertrend |
| 40 to 50 | Strong trend | Trail stops wider — trend has momentum |
| Above 50 | Very strong trend — rare | Caution: extreme readings often precede consolidation |
DI Crossover Signal
The +DI/-DI crossover gives direction alongside ADX's strength reading:
- +DI crosses above -DI AND ADX > 25 → bullish entry signal
- -DI crosses above +DI AND ADX > 25 → bearish entry signal
- Crossover when ADX < 20 → ignore — no trend behind it
ADX Filter — DI Cross with ADX Above 25
ADX as a Filter for Other Indicators
The primary use of ADX is not to generate signals itself — it is to validate signals from other indicators:
- Before acting on an EMA crossover → check ADX > 25
- Before acting on a MACD bullish cross → check ADX > 20
- Before entering any Supertrend or Ichimoku signal → confirm ADX is rising
Extreme ADX Readings
When ADX peaks above 50 and begins to fall, it signals that the trend is exhausting itself. Price may continue moving in the same direction (momentum carries it), but the rate of change is declining. This is a warning to tighten stops, not necessarily to reverse.
Section 3: Pass vs. Live — Real-Time Reliability
ADX uses Wilder smoothing, which converges more slowly than standard EMA. A 14-period ADX typically needs 28+ bars before the reading is stable. Always use at least 2× the period in warmup bars. On bar close, ADX locks — no repaint.
Section 4: Practical Use Cases
Setup: ADX(14) on 15m chart as regime filter; trade only when ADX > 20 Signal: +DI crosses above -DI AND ADX rising above 20 Entry: Next candle after +DI/-DI cross confirms above 20 ADX threshold Exit: ADX peaks and starts declining, or -DI crosses back above +DI Key rule: On 15m, ADX moves fast — re-check ADX every 30 minutes during a trade
Setup: ADX(14) on daily as primary trend filter; EMA(21/50) for direction Signal: ADX daily rises above 25 from below while EMA(21) > EMA(50) — trend regime confirmed Entry: EMA pullback entry on the day ADX crosses 25 Stop: Below the swing low that preceded the ADX breakout Target: Hold while ADX stays above 25 and EMA(21) > EMA(50); exit when either breaks
Setup: ADX(14) on weekly chart Signal: Weekly ADX rises above 25 after extended period below — major trend starting Entry: Weekly close confirmation after ADX crosses 25, with +DI > -DI Stop: Weekly close below EMA(50) or ADX drops back below 20 Target: Hold until weekly ADX peaks and turns down from high level (40+)
Real example: Any sustained market trend — when ADX(14) daily rises through 25, it signals the start of a tradeable trend. During SPY's 2023 bull run, ADX cleared 25 in January 2023 and remained elevated throughout the year. Markets where ADX stayed below 20 for weeks (like late 2022 consolidation) crushed trend-following strategies with repeated whipsaws.
Section 5: Pseudo Code
INPUT: high[], low[], close[], period=14
PROCESS:
Step 1: Compute True Range for each bar i:
tr[i] = max(high[i]-low[i], abs(high[i]-close[i-1]), abs(low[i]-close[i-1]))
Step 2: Compute raw DM:
plus_dm[i] = high[i]-high[i-1] if high[i]-high[i-1] > low[i-1]-low[i] and > 0 else 0
minus_dm[i] = low[i-1]-low[i] if low[i-1]-low[i] > high[i]-high[i-1] and > 0 else 0
Step 3: Wilder smooth TR, +DM, -DM using period N:
Seed: wilder_tr[N] = sum(tr[1:N+1])
For i > N: wilder_tr[i] = wilder_tr[i-1] - (wilder_tr[i-1]/N) + tr[i]
(same formula for wilder_plus_dm and wilder_minus_dm)
Step 4: Compute DI lines:
plus_di[i] = 100 * wilder_plus_dm[i] / wilder_tr[i]
minus_di[i] = 100 * wilder_minus_dm[i] / wilder_tr[i]
Step 5: Compute DX:
dx[i] = 100 * abs(plus_di[i] - minus_di[i]) / (plus_di[i] + minus_di[i])
Step 6: Wilder smooth DX to get ADX:
Seed: adx[2*N] = average of dx[N : 2*N]
For i > 2*N: adx[i] = (adx[i-1] * (N-1) + dx[i]) / N
OUTPUT: adx[], plus_di[], minus_di[]
EDGE CASES:
- Need at least 2*N bars for valid ADX: 28 bars minimum for period=14
- If plus_di[i] + minus_di[i] = 0: set dx[i] = 0 to avoid division by zero
- NaN in high/low/close: propagate NaN through entire chain
Section 6: Parameters & Optimization
Standard ADX Conventions
| Period | Common Use | Notes |
|---|---|---|
| 7 | Very fast, intraday | Noisy — only for high-frequency scalping analysis |
| 14 | Standard default | Works across all timeframes — Wilder's original setting |
| 21 | Slower, more stable | Better for weekly charts and position trading |
| 30 | Very slow | Signals major trend regimes only |
Parameter Impact
| Change | Effect | When to Apply |
|---|---|---|
| Decrease period | Faster ADX response, more spikes | Fast markets, intraday scalping |
| Increase period | Slower, smoother ADX curve | Weekly charts, long-term position sizing |
What is Wilder smoothing and why does ADX use it?
Wilder smoothing uses k = 1/N instead of the EMA standard k = 2/(N+1). For N=14, Wilder uses k ≈ 0.0714 vs EMA's k ≈ 0.1333. This makes Wilder smoothing significantly heavier — it responds more slowly to new data. Wilder designed ADX, ATR, and RSI to be slow, stable indicators that do not whipsaw. The tradeoff is more lag. All three indicators use this same slower smoothing by design.
Why does ADX peak before the trend ends?
ADX measures the RATE OF CHANGE in directional movement — not the level. When trend strength hits its maximum rate of acceleration, ADX peaks. The trend continues but decelerates. This is similar to a car reaching top speed: it stops accelerating but keeps moving. ADX peak = deceleration, not reversal.
Market-Specific Adjustments
- Crypto: ADX(14) on daily works well. On 4H, use ADX(10) for faster regime detection
- Equities earnings: ADX spikes hard around earnings — ignore ADX for 2 days before and after reports
- Forex: Standard ADX(14) daily — pairs like USDJPY tend to trend strongly; ADX stays elevated longer
Section 7: Synergies & Conflicts
| Works Well With | Avoid Combining With | |
|---|---|---|
| EMA crossovers | Use ADX > 25 as mandatory filter before acting on any EMA cross signal | — |
| MACD | MACD zero-line cross + ADX > 25 = high-confidence trend entry | — |
| Supertrend | ADX confirms Supertrend flip signals in genuine trending environments | — |
| Ichimoku | ADX above 25 validates Ichimoku cloud breakout signals | — |
| RSI overbought/oversold | — | RSI mean-reversion signals conflict with ADX trend-following — opposing philosophies |
| Bollinger Band bounce | — | Bollinger mean-reversion + ADX trending signal are contradictory — pick one approach |
| Multiple ADX periods | — | ADX(7) and ADX(21) on same chart give contradictory readings — use one period |
Section 8: Common Mistakes
| Mistake | Root Cause | Solution |
|---|---|---|
| Using ADX to predict direction | ADX shows strength, not direction — confused with DI lines | Always read +DI vs -DI for direction; read ADX for strength only |
| Entering as ADX peaks | High ADX often appears near trend exhaustion | Enter when ADX rises through 25 from below — not when it is already at 40+ |
| Ignoring DI crossover direction | Trading ADX > 25 without checking which DI is dominant | Always confirm +DI > -DI for long trades, -DI > +DI for short trades |
| Applying ADX to very short bars | ADX on 1m chart is extremely noisy | Use ADX on 15m minimum — below that, noise overwhelms the signal |
| Expecting ADX to work in ranges | ADX below 20 does not mean reversal — it means no trend | Use a range-specific strategy (Bollinger, RSI extremes) when ADX is below 20 |
Section 9: Cheat Sheet
USE WHEN: Checking if a market is trending before entering any trend-following signal
AVOID WHEN: Trying to get direction — use +DI/-DI for direction, not ADX itself
ENTRY SIGNAL: ADX rises above 25 from below + +DI crosses above -DI
EXIT SIGNAL: ADX peaks and turns down + -DI crosses back above +DI
PARAMETERS: Standard: ADX(14) | Fast: ADX(10) | Slow: ADX(21)
CONFLUENCE: EMA(21/50) for direction + MACD for momentum + ADX for regime confirmation
RISK: Signals appear late — ADX confirms trends already underway, not at their start
BEST TIMEFRAME: Daily for swing trading — most stable and widely used at this timeframe