ADX filter for trend entries: a EUR/USD check
Methodology
- Signal: enter in the direction of +DI/−DI only when ADX(14) is above 25, flat on weak movement.
- Engine run with costs on a sample with no pronounced trend.
- Data — daily EUR/USD bars (the stated AUD/USD pair is not represented by a separate history at the portal).
Results on real data
| Metric | Value |
|---|---|
| Instrument | EUR/USD |
| Period | 2025-06-16 — 2026-07-20 |
| Bars | 400 |
| CAGR | -7.7% |
| Drawdown | 8.8% |
| Sharpe | -1.87 |
| Winning trades | 11% |
| Trades | 18 |
| Time in market | 41% |
How much can you trust this result
A single return figure proves nothing — it is easy to curve-fit to history. Below are three robustness checks. We show them even when they go against the strategy.
The first 70% of the data is "training", the last 30% is a fair test on data the rules never saw. If the result is far worse on the test set, the strategy was fitted to the past.
| Metric | Train | Test (OOS) |
|---|---|---|
| CAGR/yr | -9.6% | -3.0% |
| Sharpe | -2.06 | -1.39 |
| Max drawdown | 7.8% | 1.5% |
| Bars | 279 | 120 |
The sample is cut into 5 consecutive segments. The return in each shows whether the strategy works evenly over time or rests on one lucky stretch.
Trade order is reshuffled 2,000 times (bootstrap). The range shows how much the outcome depended on a lucky sequence rather than the strategy itself. p5–p95 is the corridor of "almost all" outcomes.
Computed from the per-bar returns of the same run (costs already included). Monte-Carlo is deterministic: the numbers are stable across rebuilds. Historical robustness does not guarantee future results.
Download the exact sample and run the logic yourself — the numbers above should match.
A Binance spot EUR/USDT proxy series, not a forex-broker feed. Binance Spot REST API (api.binance.com/api/v3/klines).
Conclusion
Even with the ADX filter the result on a trendless sample is negative. The filter let directional +DI/−DI entries through a noticeable share of the time, but on a market with no sustained move those entries reversed against the position again and again — the share of winning trades came out very low. A movement-strength filter cuts part of the range noise but does not create a trend where there is none, and the entries it allowed ran into the chop.
Practical takeaway for the trader
The ADX filter is an off-switch for a trend strategy in a range, not a source of profit: it reduces the number of entries, but the ones that clear the threshold still get torn apart on reversals when there is no trend. On a trendless instrument the filter does not prevent the loss.
FAQ
Was the ADX filter not supposed to improve the result?
It reduces the number of entries in a range but cannot create a trend. The directional entries that cleared the threshold ran into reversals again and again on a sample with no sustained move — the share of winning trades came out very low, so the outcome stayed negative.
How do you choose the ADX threshold?
The 25 benchmark is not universal: the typical ADX level differs across instruments. The threshold should be calibrated to the actual distribution of values for the specific asset.
Why a check on EUR/USD?
It is the only pair with its own reproducible history at the portal; the result is honestly limited to the available data.