Markets › FX · EURUSD, GBPUSD, USDJPY, AUDUSD spot, 1-hour

ADX Indicator Strategy Backtest: ADX + DI on 4 Forex Majors, 22 Years

Wilder's ADX and DI lines as a stand-alone trading strategy on EURUSD, GBPUSD, USDJPY and AUDUSD, 1-hour bars, 2004 to 2026: ADX 20 or 25, costs, swaps, and the same holdings at random times.

EURUSD · GBPUSD · USDJPY · AUDUSD · 1-hour bars · ADX(14) with +DI and -DI · Protocol v1.0 plus the 8 Oct 2026 rules

Buried · No proven edge

It saw the trend. It could not tell which way to bet.

BornFrozen 21 Oct 2026 (adx_spec.md), before any ADX value was computed
Died21 Oct 2026

Variants tried: 8 · Passed every gate: 0 · Pairs passing (3 of 4 needed): 0 · Holdout opened: yes (already used)

Short answer: not as a stand-alone strategy on the forex majors in our test. Entering when ADX(14) crosses above 20 or 25 in the direction of the stronger DI line and exiting when the DI lines cross back made -1.87 to +1.70 pips a trade before costs on EURUSD, GBPUSD, USDJPY and AUDUSD (1-hour bars, 2004 to 2026), and none of the eight combinations beat random holdings of the same lengths.How much costs took here, compared across all 54 of our tests →Did the same rules work on other markets? The cross-market scoreboard →

00The verdict in three lines

  • We tested the ADX indicator strategy with the DI lines on the four forex majors, 1-hour bars, 2004 to 2026: enter when ADX(14) crosses above 20 (or 25) in the direction of the stronger DI line, exit when the DI lines cross back. 1.0 pip a round trip (1.2 on USDJPY).
  • It made close to nothing before costs on every pair (-1.87 to +1.70 pips a trade over about 2,100 to 2,400 trades each) and lost after costs on six of the eight combinations.
  • No combination beat random holdings of the same lengths at our 95% bar, and no threshold passed on any pair, let alone three of four. Buried.

01What is the ADX indicator?

The Average Directional Index (ADX) and the directional lines +DI and -DI are J. Welles Wilder's (1978), together known as the Directional Movement Index (DMI). ADX measures how strong a trend is, not its direction; the DI lines say which side is pushing harder. The usual reading: ADX above 20 or 25 means a trend, +DI above -DI means up, -DI above +DI means down.

ADX indicator formula and settings (period 14, as Wilder)

  • True range = the largest of high minus low, |high - previous close| and |low - previous close|. +DM = today's high minus yesterday's high if that is positive and larger than the fall in the low; -DM the mirror image.
  • Each is smoothed the Wilder way over 14 bars (first value the sum of 14, then S - S/14 + today). +DI = 100 × smoothed +DM / smoothed TR; -DI the same with -DM.
  • DX = 100 × |+DI - (-DI)| / (+DI + -DI); ADX = the average of the first 14 DX values, then (previous ADX × 13 + DX) / 14.

02The ADX + DI trading strategy we tested

  • Buy signal: at the close of a 1-hour bar, ADX crosses above the threshold (it was at or below it one bar earlier) and +DI is above -DI. Sell signal: the same cross with -DI above +DI. Fill at the next minute's open.
  • Exit: a long when -DI crosses above +DI, a short when +DI crosses above -DI. No stop, no target, so the test measures the rule itself.
  • Re-entry only on a new ADX cross; if the exit bar is itself an entry bar, the position flips at the same price.
  • ADX 20 or 25? Both, declared before the test: eight pair-and-threshold combinations, all reported.

03How we tested it

The 1-minute bid histories of an IC Markets MetaTrader 4 demo server for the four pairs, January 2004 to 28 September 2026, built into 1-hour bars on the New York clock as in our earlier forex study; signals from the 500th bar of each pair. Costs: 1.0 pip a round trip (1.2 on USDJPY), with 1.5× and 2.5× shown, and a swap stress of 0.5 pip a night. Gates: our forex bar, a first-period t-statistic of 2.5, and the cross-market rule: a threshold counts only if it passes every gate on at least three of the four pairs. Periods 2004 to 2012, 2013 to 2019, and a holdout from 2020 already used by the forex study. Control: every pair's real holdings moved to random times, same direction and length, 500 times. Engine check: the indicator against a literal recomputation, the trade rules on a hand-made path, and an independent re-implementation that matched every trade of all eight combinations; in the first run the control's own check failed (a position opened by a flip was treated as overlapping the one it replaced) and was fixed before any result was printed (adx_selftest_result.txt). The clock of each file was checked; no week needed correcting.

04Does the ADX strategy work? Results by pair

Net pips after costs, no swap. Gross is before costs.

Pair and thresholdTradesWin rateGross pips per tradeNet pips per tradeNet totalProfit factorMedian hours heldVerdict
EURUSD ADX-202,20734.0%-0.29-1.29-2,844 pips0.9420Buried
EURUSD ADX-252,17133.3%-0.59-1.59-3,452 pips0.9322Buried
GBPUSD ADX-202,22134.3%-0.92-1.92-4,259 pips0.9321Buried
GBPUSD ADX-252,10435.5%+1.19+0.19+395 pips1.0123Buried
USDJPY ADX-202,34934.3%+1.70+0.50+1,168 pips1.0320Buried
USDJPY ADX-252,18935.7%+1.06-0.14-303 pips0.9922Buried
AUDUSD ADX-202,37532.6%-1.87-2.87-6,805 pips0.8420Buried
AUDUSD ADX-252,24534.2%-1.87-2.87-6,442 pips0.8521Buried
-5,0000200620102014201820222026EURUSDGBPUSDUSDJPYAUDUSD

Cumulative net pips by month with ADX 20 (a simple sum). The holdout from 2020 was already used before this test.

By period

Pair and threshold2004 to 2012 (trades)2013 to 2019 (trades)Holdout* 2020 to 2026 (trades)t, first periodPF, second period
EURUSD ADX-20-737 pips (860)-1,740 pips (681)-367 pips (666)-0.280.87
EURUSD ADX-25-688 pips (863)-1,700 pips (671)-1,064 pips (637)-0.270.87
GBPUSD ADX-20-3,357 pips (892)+404 pips (652)-1,307 pips (677)-1.221.03
GBPUSD ADX-25+1,740 pips (837)-165 pips (663)-1,181 pips (604)0.600.99
USDJPY ADX-20+540 pips (955)-76 pips (721)+705 pips (673)0.270.99
USDJPY ADX-25-1,064 pips (870)+594 pips (674)+167 pips (645)-0.561.05
AUDUSD ADX-20+1,093 pips (924)-4,331 pips (725)-3,566 pips (726)0.580.66
AUDUSD ADX-25-847 pips (872)-3,217 pips (716)-2,378 pips (657)-0.390.75

05ADX 20 or 25?

PairADX 20: tradesADX 20: net pips per tradeADX 20: percentileADX 25: tradesADX 25: net pips per tradeADX 25: percentile
EURUSD2,207-1.2942.82,171-1.5936.2
GBPUSD2,221-1.9230.42,104+0.1971.2
USDJPY2,349+0.5090.82,189-0.1479.8
AUDUSD2,375-2.876.62,245-2.875.8

Neither threshold is better across the pairs: 25 helped on GBPUSD and hurt on USDJPY, and on EURUSD and AUDUSD both lost. A threshold that works on one pair and not on the next is what noise looks like.

06ADX or chance?

Pair and thresholdTradesReal net per tradeRandom holdings, medianRandom, 5th to 95thPercentile (95 needed)
EURUSD ADX-202,207-1.29-1.05-3.39 to +1.4042.8
EURUSD ADX-252,171-1.59-1.05-3.27 to +1.5136.2
GBPUSD ADX-202,221-1.92-0.99-3.76 to +2.2230.4
GBPUSD ADX-252,104+0.19-0.90-3.96 to +2.7271.2
USDJPY ADX-202,349+0.50-1.44-3.56 to +0.8890.8
USDJPY ADX-252,189-0.14-1.30-3.69 to +1.0679.8
AUDUSD ADX-202,375-2.87-0.99-3.07 to +0.816.6
AUDUSD ADX-252,245-2.87-0.98-2.96 to +0.995.8

The control keeps every holding's direction and length and moves them to random hours, 500 times. If the ADX and DI signals picked better moments, the real trades would sit near the top. None reached the 95th percentile; on AUDUSD the real trades did worse than almost all random runs.

07Costs, swap, long and short

Pair and thresholdGross per tradeBase cost1.5× cost2.5× costSwap stress
EURUSD ADX-20-0.29-1.29-1.79-2.79-1.99
EURUSD ADX-25-0.59-1.59-2.09-3.09-2.35
GBPUSD ADX-20-0.92-1.92-2.42-3.42-2.63
GBPUSD ADX-25+1.19+0.19-0.31-1.31-0.61
USDJPY ADX-20+1.70+0.50-0.10-1.30-0.19
USDJPY ADX-25+1.06-0.14-0.74-1.94-0.88
AUDUSD ADX-20-1.87-2.87-3.37-4.37-3.51
AUDUSD ADX-25-1.87-2.87-3.37-4.37-3.58
Pair and thresholdLongs: trades / gross / netShorts: trades / gross / netPair, first → last price
EURUSD ADX-201,124 / -1,851 pips / -2,975 pips1,083 / +1,215 pips / +132 pips1.2593 → 1.13685
EURUSD ADX-251,107 / -1,589 pips / -2,696 pips1,064 / +308 pips / -756 pips1.2593 → 1.13685
GBPUSD ADX-201,103 / -937 pips / -2,040 pips1,118 / -1,101 pips / -2,219 pips1.7858 → 1.32572
GBPUSD ADX-251,022 / -720 pips / -1,742 pips1,082 / +3,218 pips / +2,136 pips1.7858 → 1.32572
USDJPY ADX-201,141 / +3,934 pips / +2,565 pips1,208 / +53 pips / -1,397 pips107.22 → 157.393
USDJPY ADX-251,061 / +1,433 pips / +159 pips1,128 / +891 pips / -462 pips107.22 → 157.393
AUDUSD ADX-201,141 / -1,416 pips / -2,557 pips1,234 / -3,014 pips / -4,248 pips0.7534 → 0.70195
AUDUSD ADX-251,091 / -3,660 pips / -4,751 pips1,154 / -537 pips / -1,691 pips0.7534 → 0.70195

Year by year, ADX 20 (net pips)

YearEURUSDGBPUSDUSDJPYAUDUSD
2004-148485-101670
2005-605-1,000-278-117
2006-469851-18777
2007-65-431685287
20083282331,191-1,411
200994-1,137-216-277
2010-384-1,800148763
2011265-673-6361,281
2012247116-67-180
2013-1,138455529-889
2014-511-1,207698-838
201587666-96-678
2016-255-119-483-1,188
201744-316-385-448
2018-2703168-175
2019304921-507-115
2020-322-2011,059496
2021-74-113-308-403
20221831,000955-396
2023-175-1,165-633-1,285
2024-113-705-454-972
2025-113-113580-637
2026 (to 28 Sep)247-10-495-368

08The gates

Pair and thresholdTrades1. PF ≥ 1.2 in validation2. ≥ 50 trades in each period3. t ≥ 2.5 on development4. Above the 95th percentile of the shifted-holding control5. Positive without the 10 best trades6. Holdout net positive (already used)
EURUSD ADX-202,207failpassfailfailfailfail
EURUSD ADX-252,171failpassfailfailfailfail
GBPUSD ADX-202,221failpassfailfailfailfail
GBPUSD ADX-252,104failpassfailfailfailfail
USDJPY ADX-202,349failpassfailfailfailpass
USDJPY ADX-252,189failpassfailfailfailpass
AUDUSD ADX-202,375failpassfailfailfailfail
AUDUSD ADX-252,245failpassfailfailfailfail

Cross-market rule: ADX 20 passed every gate on 0 of 4 pairs, ADX 25 on 0 of 4; 3 of 4 were needed.

The data-gap check

Pair and thresholdTradesOpen across a suspect gapNet pips per tradeVerdict
EURUSD ADX-202,20752-1.29 → -2.24Buried → Buried
EURUSD ADX-252,17161-1.59 → -2.43Buried → Buried
GBPUSD ADX-202,22165-1.92 → -3.46Buried → Buried
GBPUSD ADX-252,10468+0.19 → -1.24Buried → Buried
USDJPY ADX-202,34960+0.50 → -1.09Buried → Buried
USDJPY ADX-252,18962-0.14 → -1.65Buried → Buried
AUDUSD ADX-202,37569-2.87 → -4.23Buried → Buried
AUDUSD ADX-252,24567-2.87 → -4.08Buried → Buried

09Verdict by pair and threshold

Pair and thresholdCauseGates failedVerdict
EURUSD ADX-20No proven edge1, 3, 4, 5, 6Buried
EURUSD ADX-25No proven edge1, 3, 4, 5, 6Buried
GBPUSD ADX-20No proven edge1, 3, 4, 5, 6Buried
GBPUSD ADX-25Fragile1, 3, 4, 5, 6Buried
USDJPY ADX-20Fragile1, 3, 4, 5Buried
USDJPY ADX-25Costs1, 3, 4, 5Buried
AUDUSD ADX-20No proven edge1, 3, 4, 5, 6Buried
AUDUSD ADX-25No proven edge1, 3, 4, 5, 6Buried

Causes follow the protocol's definitions: Costs = positive before costs, negative after; Fragile = positive, not without its ten best trades; No proven edge = otherwise. None of this says the ADX is useless as a description of the market; it says this common way of trading it did not show an edge we could demonstrate.

TWhat this shows, and what to take into your own tests

What the results show

  • Entering when the ADX crosses above 20 (or 25) in the direction of the stronger DI line, and leaving when the DI lines cross back, made between -1.87 and +1.70 pips a trade before costs on the four majors from 2004 to 2026: close to nothing.
  • None of the eight pair-and-threshold combinations beat the same holdings placed at random times at our 95% bar; the best was USDJPY with ADX 20 (percentile 90.8), the worst AUDUSD, which did worse than random with either threshold.
  • Only two of the eight combinations ended above zero after costs, and they disagree: GBPUSD with ADX 25 and USDJPY with ADX 20, not the other threshold on either pair. USDJPY's gain came from long trades while the pair rose from 107 to 157.

What remains unknown

  • Other uses of the ADX: as a filter for another entry (for example a breakout or a pullback only when ADX is high), on daily charts, or on stocks and indices. We tested the stand-alone ADX + DI rule on 1-hour forex.
  • Other settings than Wilder's 14, and an exit on the ADX turning down. We fixed one rule and two thresholds before running anything.
  • Real swaps. They changed sign over these years; our 0.5-pip-a-night stress made every combination worse.

Why it was buried

A trend-strength reading does not say where the price goes next. By the time the ADX crosses 20 the move that pushed it there has happened; the DI direction at that moment was right about a third of the time with small winners and losers on both sides, and the result per trade was within a pip or two of zero before costs, on all four pairs. Supertrend, MACD and Donchian on the same pairs and bars were buried for the same reason.

What you can apply to your own tests

  • Treat ADX as a description of the market, not a signal. High ADX means it has been trending; it does not say it will continue.
  • If you use it as a filter, test the filter on its own against the unfiltered strategy, with the threshold fixed in advance.
  • Check several markets with the same rule. One good pair out of four is what chance looks like.

A note on the numbers: drawdown figures are measured on closed trades unless a table says it includes open losses. Open losses inside a trade are not counted in a closed-trade drawdown, so real account risk is higher, especially for systems with no stop. Backtests are not live trading.

FAQCommon questions

Does the ADX indicator strategy work?

Not in our backtest. On four forex majors over 22 years, the ADX + DI rule made between -1.87 and +1.70 pips a trade before costs, lost after costs on six of eight pair-and-threshold combinations, and passed every gate on none of the four pairs.

Is ADX 20 or 25 better?

Neither, in our test: 25 did better than 20 on GBPUSD and worse on USDJPY, and both lost on EURUSD and AUDUSD. Results that flip from pair to pair are what noise looks like.

What does the ADX indicator measure?

Trend strength, not direction. ADX rises when price moves strongly either way; the +DI and -DI lines show which side is stronger. Wilder used a 14-period setting.

How is the ADX calculated?

From the true range and the directional movements (+DM, -DM), each smoothed over 14 bars with Wilder's method; +DI and -DI are the smoothed movements as a percentage of the smoothed true range, DX is their difference over their sum, and ADX is a 14-bar Wilder average of DX.

How was the ADX strategy tested?

On 22 years of 1-hour bars of four forex majors with rules written and dated before the data was run, costs included on every trade, results split into development, validation and holdout periods, a random-entry control as the benchmark, and every variant reported. Read the protocol.

10Check our arithmetic

Frozen specificationThe indicator formula, the rules, costs, periods, gates, the cross-market rule and the control, dated before any ADX value was computed.
adx_spec.md
CodeThe engine (its readings of the rules at the top), the independent re-implementation, the self-test, the run (node adx_run.js), and the clock check and gap audit of USDJPY and AUDUSD (node adx_clock.js). Needs your own MT4 history.
adx_lib.js · adx_ref.js · adx_selftest.js · adx_run.js · adx_clock.js
Shared code it usesThe MT4 loader, bars, statistics and control helpers.
control_audit_lib.js · fx_data.js · gh_lib.js · gx_lib.js · hourly_lib.js · ma_lib.js · rsi2_protocol.js
ResultsSelf-test result, the console output of the run, all numbers, the clock checks and the gap lists.
adx_selftest_result.txt · adx_results.txt · adx_summary.json · adx_clock_result.json · EURUSD gaps · GBPUSD gaps · USDJPY gaps · AUDUSD gaps
Trade logs (CSV)Every trade: entry and exit (New York time), direction, prices, hours held, rollovers, gross and net pips, and the swap stress.
EURUSD ADX-20 · EURUSD ADX-25 · GBPUSD ADX-20 · GBPUSD ADX-25 · USDJPY ADX-20 · USDJPY ADX-25 · AUDUSD ADX-20 · AUDUSD ADX-25

Code provenance: our own code, written from Wilder's published formulas and the rules in the specification.

11Data notes

Source. A broker's demo history of spot FX, bid prices. Spreads are not in the files, so costs are an assumption, shown at three levels. Swaps are not in the base result. Bars. 1-hour bars on the New York clock; other platforms may cut hours differently, and their ADX values will differ slightly.

12Corrections

22 Oct 2026, navigation: added a link to the new guide comparing trading costs across all our tests. No result changed. 22 Oct 2026, navigation: added a link to the new cross-market scoreboard, which includes this test. No result changed. 22 Oct 2026, navigation: added a link to the new guide comparing trend following and mean reversion across all our tests. No result changed.

+More tests and guides