How to Use ADX to Filter False Breakouts (Thresholds, Pitfalls and a Ready-Made Rule)

ADX does not tell you whether a stock will go up or down. It answers one narrower question: is there a clear trend right now? That is exactly why its best job is not "buy signal" but filter, sitting behind a breakout rule. Two stocks can both close at a 20-day high, and with ADX at 17 versus 31 you are looking at two very different market states.

Key takeaways

  • ADX(14) measures trend strength, not direction. It is built from +DI and −DI on a 0–100 scale.
  • Usual reading: below 20 no real trend, 20–25 grey zone, above 25 a trend is in place, above 40–50 strong but possibly well advanced.
  • ADX lags by construction, so do not use it as a trigger. Use it as a filter that answers "what kind of market did this breakout happen in?"
  • Direction of ADX matters more than a single level. The app exposes the level; approximate "rising" with moving-average conditions.
  • High ADX does not mean the stock is going up. Strong downtrends also print high ADX, so direction has to come from price and moving averages.

ADX measures trend strength, not direction

ADX stands for Average Directional Index; the standard setting is 14 days. The calculation has three steps: each day's upward and downward directional movement is smoothed into +DI and −DI; the gap between them is divided by their sum to give DX; and DX is smoothed over 14 days to give ADX. Two properties follow. ADX only cares how far apart +DI and −DI are, not which is bigger, so a clean rally and a clean sell-off both produce a high ADX. And because it is smoothed twice, it moves more slowly than price by design.

ADX(14) bandUsual meaningWhat it means for a breakout rule
0–20No clear trend, sideways chopBreakouts are often false and get pulled back into the range
20–25Grey zone, a trend may be formingNeeds volume, moving averages or other conditions to back it up
25–40Trend in place and advancingThe breakout has trend support; this is the zone the filter is meant to let through
40–50 and aboveStrong trend, often well advancedCan still continue, but the risk of buying late rises

These bands are rules of thumb, not precise boundaries. The 25 threshold is popular because it balances removing most sideways markets against missing too many trend starts; try 20, 25 and 30 in a backtest. Glossary entry: ADX(14).

Why ADX lags, and why that is acceptable

Two rounds of 14-day smoothing mean that after a trend begins, ADX often needs a week or two to climb from below 20 to above 25. Wait for the cross before buying and you will miss the start every time. That is why many people try ADX and give up: they were using it as a trigger.

A trigger's job is "tell me to act today", and it must be timely. A filter's job is "tell me whether today's environment is worth acting in", and it can be slow as long as it is not wrong. Put ADX behind is_20d_breakout and you are really asking: when this stock made a 20-day high, was the market already trending, or still bouncing inside a box? For that question the lag is not a flaw; it is confirmation.

The cost should be stated plainly. ADX will drop some genuine breakouts, because some trends start while ADX is still low. Fewer false breakouts and fewer true starts is the built-in trade-off of any filter. What to check in a backtest is whether win rate and payoff ratio improve after the filter, not whether one trade was missed.

Combining ADX with the breakout and a volume check

A lone adx_14 > 25 condition is close to useless: it says nothing about direction or about what happened today. The practical setup is three conditions, each doing one job:

  1. is_20d_breakout == 1: what happened today. The close made a new 20-day high. This is the event.
  2. adx_14 > 25: what the environment looks like. Is a trend already in place? This is the filter.
  3. vol_vs_avg20d > 1.5: did anyone show up. Volume is at least 1.5 times the 20-day average, so the breakout was not a drift higher on thin volume. Glossary: Vol Ratio.

One more layer is often skipped: the direction of ADX matters more than its level. Climbing from 18 to 26 says the trend is strengthening; falling from 45 to 30 is still above 25 but the trend is fading. In Stock Compass adx_14 gives the current value; there is no "ADX rising" condition. A workable approximation is to require that price structure is already trending, for example ma20_above_ma50 == 1 (20-day average above the 50-day) or days_above_ma20 >= 10 (price has held above its 20-day average for 10 sessions). When those hold, ADX is usually rising or elevated, and they also settle the direction problem covered below.

To backtest the full 20-day breakout strategy see this guide; to express this kind of logic as rules, see turning ideas into buy rules.

A worked example: the same breakout at ADX 17 and ADX 31

Both trades below are illustrative. They show what the filter is doing; they are not real trade records.

Stock A has spent two months moving sideways between 36 and 41 dollars, then closes at 41.20, a new 20-day high, with ADX(14) at 17. Stock B has walked from 34 to 40 over the past month with shallow pullbacks, then closes at 41.50, a new 20-day high, with ADX(14) at 31, up from 22 over the previous ten sessions. Both use the same exit rules: close on a floating loss above 5%, or on a close below the 20-day low.

Stock AStock B
Breakout close41.2041.50
ADX(14)1731 (and rising)
Volume ratio1.1x1.8x
Moving averagesMA20 and MA50 tangledMA20 above MA50
Filter resultBlocked by adx_14 > 25Passed
Illustrative pathBack inside the range in 3 days, −5% stop hit on day 6Near 46 three weeks later, about +10.8% open gain

Stock A is the classic false breakout in a sideways market: the new high was just another probe of the top of the box, with no trend behind it and no volume following. Stock B did not go up because ADX was high. It was already in a trend, the breakout was a continuation, and ADX simply put a number on that state.

To repeat: Stock B could just as easily have failed. A filter shifts the probability distribution across a batch of trades, not the outcome of any single one, and its value only shows up across dozens or hundreds of backtested trades.

What ADX gets wrong

  • Sideways chop after a sharp run. ADX is a smoothed value. Price can stall for a week or two while ADX is still above 30, so breakouts it lets through at that point are happening inside a decaying trend. That is why backing it up with moving-average conditions is steadier than trusting the level alone.
  • Strong downtrends also print high ADX. A stock that has fallen from 60 to 40 can easily show ADX above 40. If your rule is only adx_14 > 25, it will wave through bounces in that kind of stock. Direction has to come from price and moving averages: is_20d_breakout requires a new high, and adding ma20_above_ma50 rules out most rallies inside a downtrend.
  • Setting the bar too high. Filter at 40 and you are left only with trends that have already travelled a long way, with a clearly higher risk of buying late. If you do enter that late, at least tighten the stop.

How to set this up in Stock Compass

The buy group requires all four conditions at once; the exit group closes the position if either condition fires. The strategy is a scanner: it tells you which names meet your conditions today, and placing an order is still your decision.

{
  "name": "20-day breakout + ADX filter",
  "market": "us",
  "rules": {
    "buy": {
      "v": 2,
      "outerOp": "OR",
      "groups": [
        {
          "innerOp": "AND",
          "conditions": [
            { "indicator": "is_20d_breakout", "operator": "==", "value": 1 },
            { "indicator": "adx_14", "operator": ">", "value": 25 },
            { "indicator": "vol_vs_avg20d", "operator": ">", "value": 1.5 },
            { "indicator": "ma20_above_ma50", "operator": "==", "value": 1 }
          ]
        }
      ]
    },
    "add": { "v": 2, "outerOp": "OR", "groups": [] },
    "trim": { "v": 2, "outerOp": "OR", "groups": [] },
    "exit": {
      "v": 2,
      "outerOp": "OR",
      "groups": [
        {
          "innerOp": "AND",
          "conditions": [
            { "indicator": "floating_loss_pct", "operator": ">", "value": 5 }
          ]
        },
        {
          "innerOp": "AND",
          "conditions": [
            { "indicator": "is_20d_breakdown", "operator": "==", "value": 1 }
          ]
        }
      ]
    }
  }
}
  • is_20d_breakout == 1: today's close is a new 20-day high; the trigger event.
  • adx_14 > 25: a trend is already in place, so breakouts out of a sideways range are blocked.
  • vol_vs_avg20d > 1.5: volume at least 1.5 times the 20-day average, so money followed the breakout.
  • ma20_above_ma50 == 1: bullish moving-average alignment; confirms direction and approximates "ADX rising or elevated".
  • floating_loss_pct > 5: exit on a floating loss above 5%, so a failed breakout cannot do more damage.
  • is_20d_breakdown == 1: exit on a close below the 20-day low, tying the exit to the reason for buying.

To loosen the rule, drop the adx_14 threshold to 20 and re-run the backtest; to avoid buying late, add adx_14 < 45. For pairing this with targets and stops, see take-profit and stop-loss rules.

Common mistakes

  • Using ADX as a buy signal. "Buy when ADX crosses 25" systematically puts you in mid-trend, and often in a high-ADX market with no upward direction at all.
  • Reading the level and ignoring the direction. ADX at 30 on the way down from 48 and ADX at 30 on the way up from 18 are completely different states.
  • Tuning on one market and applying it everywhere. Hong Kong, mainland China and US stocks have different volatility structures; the same 25 means different things. Re-run the backtest when you change market.
  • Judging from a handful of trades. One or two "the breakout ADX blocked went up anyway" stories prove nothing; a filter's effect only appears with a large enough sample.

Summary

ADX measures how clear a trend is. It is not a direction and not an entry point. It lags by construction, so it should not be a trigger, but that same slowness makes it a good way to confirm whether a breakout happened inside a trend or inside a box. In practice you hang it behind is_20d_breakout, add a volume check to confirm participation, and add moving-average alignment to confirm direction and approximate a rising ADX. Two things to keep in mind: strong downtrends also print high ADX, so direction must be confirmed separately; and a filter changes the odds across a batch of trades, not the result of any one of them, so the verdict has to come from a backtest.

FAQ

What ADX level counts as a trend?

The common convention is that ADX(14) below 20 means no clear trend, 20 to 25 is a grey zone, and above 25 a trend is in place. Above 40 to 50 the trend is strong but often well advanced. These are rules of thumb, so test 20, 25 and 30 in a backtest before settling on one.

Does a high ADX mean the stock is going up?

No. ADX measures how strong the trend is, not which way it points, and a sharp sell-off produces a high ADX just as a rally does. Direction has to come from price or moving-average conditions, such as requiring a 20-day breakout and the 20-day average above the 50-day.

Why not just buy when ADX crosses 25?

Because ADX is smoothed twice and lags price, a cross above 25 usually arrives well after the trend started, so you would be buying mid-trend. It also fires in downtrends. ADX works better as a filter that qualifies a separate trigger, such as a breakout, than as a trigger on its own.

How do I require a rising ADX in Stock Compass?

The adx_14 indicator gives the current level, and there is no direct rising condition. A practical approximation is to add a moving-average condition such as ma20_above_ma50 == 1 or days_above_ma20 >= 10. When price structure is trending like that, ADX is usually rising or elevated, and you get directional confirmation at the same time.

Will Stock Compass buy the breakout for me when the rule fires?

No. Stock Compass does not connect to brokers or place orders. It scans the market against the rules you wrote and lists the names that meet them on your daily signal list. Whether to act, and how to place the order, remains your decision.