ADX on crypto: a filter, not a signal
Holding while ADX showed a strong trend and the price was above its average made money with 5 of 6 settings on 4-hour bars, but the best made only +16.1% a year and none passed the two-period test. ADX was more useful as a filter on other signals.
How it works
The Average Directional Index measures how strong a trend is, from 0 to 100, without saying which way it goes. Readings above 20 to 25 are usually read as trending. To give it a direction, we also required the close to be above its exponential moving average of the same length.
What we tested
- ADX over 14 or 20 bars above 20, 25 or 30, with the close above the EMA of the same length: 6 settings.
Every setting was run on eight bar lengths, from 1 minute to 4 hours, on Upbit's Korean-won market: 12 large coins from January 2024 to October 2026 (from January 2025 on 5- and 10-minute bars; 8 coins from April 2026 on 1- and 3-minute bars). Signals are taken at a bar's close and filled at the next bar's open, spot buying only, with equal money in each coin. Every trade pays Upbit's 0.05% fee plus one price tick of slippage. That makes 6 single-indicator settings, and 0 more combinations where the best of them were given a filter or an exit rule. Full method.
Results by setting and bar length
Each cell is the yearly return after costs over the whole period. An outlined cell passed the two-period test: at least +10% a year in both the first and the second period, with the second keeping at least half of the first.
Return per year after costs, %
Sea level (0) is break-even after costs: blue is under water, green to brown is land.
Settings above water after costs: 5 of 6 on 4-hour bars, and none on 1-hour bars or shorter. None passed the two-period test.
| Setting | 1m | 3m | 5m | 10m | 15m | 30m | 1h | 4h |
|---|---|---|---|---|---|---|---|---|
| ADX(14) above 20 and close above EMA 14 | −100.0 | −100.0 | −100.0 | −100.0 | −100.0 | −98.8 | −86.1 | −11.1 |
| ADX(14) above 25 and close above EMA 14 | −100.0 | −100.0 | −100.0 | −100.0 | −99.9 | −95.5 | −73.7 | +1.2 |
| ADX(14) above 30 and close above EMA 14 | −100.0 | −100.0 | −100.0 | −100.0 | −99.1 | −87.1 | −58.2 | +9.3 |
| ADX(20) above 20 and close above EMA 20 | −100.0 | −100.0 | −100.0 | −100.0 | −99.8 | −94.2 | −68.3 | +4.7 |
| ADX(20) above 25 and close above EMA 20 | −100.0 | −100.0 | −100.0 | −100.0 | −98.3 | −82.2 | −49.9 | +16.1 |
| ADX(20) above 30 and close above EMA 20 | −100.0 | −100.0 | −100.0 | −99.2 | −91.7 | −63.6 | −30.5 | +11.9 |
What we learned
- On its own, ADX trend-holding was weak: a median of +7.0% a year on 4-hour bars and a loss on every shorter bar length.
- Higher thresholds were better on 4-hour bars: ADX above 30 had a median of +10.6%, above 20 a median of −3.2%.
- As a filter it was one of the most common ingredients of combinations that passed the two-period test: ADX(14) above 25 was the second most frequent filter among the 2,370 passing combinations, after Bitcoin's own daily trend. Example on 1-hour bars: BB(50, 2.5σ) buy above upper band, sell below middle + 4-hour chart above EMA 200 + ADX(14) above 20, +29.5% a year.
Questions
How should ADX be used in crypto trading?
As a filter that lets another signal trade only when a trend is strong, rather than as a signal of its own. On its own it made little money even on 4-hour bars.
Every setup with this indicator in the explorer: 4h 1h 30m 15m