By the time we reach ADX, Welles Wilder's indicator family can look like a long chain of formulas.
True Range
→ ATR
→ +DM / -DM
→ +DI / -DI
→ DX
→ ADX
But there is a more useful way to see it.
These calculations belong to one larger design problem:
How can we turn
"this market is trending"
into something measurable?
Wilder published the Directional Movement Concept and the Directional Movement System in his 1978 book New Concepts in Technical Trading Systems.
In this companion lesson, we will not rebuild the Python code. We already did that in the Core Path. Instead, we will ask why the system needs all of these layers.
1. What the Historical Record Clearly Shows
Wilder's 1978 book contains a section titled The Directional Movement Concept. Publisher material also lists a separate The Directional Movement System.
Concept
→ define directional movement mathematically
System
→ turn those measurements
into an operating framework
A later article in Technical Analysis of Stocks & Commodities reproduced Wilder's description of directional movement as a problem he had spent substantial time studying before reducing it to a mathematical equation.
So the historical starting question was not simply:
How do I invent ADX?
It was closer to:
How do I define
directional movement
in measurable terms?
2. Direction Sounds Simple Until You Try to Measure It
Looking at a chart, we casually use words such as:
uptrend
downtrend
sideways
A computer cannot use those descriptions until we define them.
Should direction come from:
Close versus previous Close?
today's High?
today's Low?
the whole trading range?
the size of the move?
the persistence of the move?
The Directional Movement framework can be read as an attempt to break that vague visual idea into smaller measurable questions.
3. Why High and Low Matter
Momentum can begin with closing prices.
Close today
-
Close N periods ago
Directional Movement asks something different.
Did today's range
expand upward?
or
Did today's range
expand downward?
That is why the calculation compares today's High and Low with the previous bar's High and Low.
4. +DM and -DM Turn Range Expansion into Direction
The Core Path defined two candidate moves:
Up Move
=
High today - High yesterday
Down Move
=
Low yesterday - Low today
The stronger qualifying side becomes directional movement.
Up Move wins
→ +DM
Down Move wins
→ -DM
neither qualifies
→ both zero
One ambiguous price range has now been transformed into a directional quantity.
5. Raw Directional Movement Has a Scale Problem
Imagine two markets:
Market A
+DM = 2
Market B
+DM = 20
The second number is larger, but the markets may trade at completely different price levels and normally move through very different ranges.
Directional movement therefore needs context.
6. True Range Supplies the Context
True Range asks how large the relevant movement of the bar was.
True Range
=
max(
High - Low,
|High - Previous Close|,
|Low - Previous Close|
)
This gives the Directional Movement framework a measure of total relevant price movement against which directional movement can be compared.
Review: What Is True Range? Measure Daily Price Movement with Python .
7. Wilder Smoothing Creates a Stable Running Measurement
Wilder did not use every raw one-bar measurement directly.
The same recursive smoothing logic appears across the framework.
True Range
→ smooth
+DM
→ smooth
-DM
→ smooth
later DX
→ smooth again
This is why Alphesta separated Wilder Smoothing into its own Learning Block.
8. +DI and -DI Turn Direction into a Relative Measure
+DI
=
100 ×
smoothed +DM
-------------
smoothed TR
-DI
=
100 ×
smoothed -DM
-------------
smoothed TR
The key idea is the ratio.
directional movement
↓
divide by relevant range
↓
relative directional strength
That makes +DI and -DI more interpretable than raw price-unit movement alone.
9. Direction and Trend Strength Are Different Questions
Once we have +DI and -DI, their relative position can describe directional dominance.
+DI > -DI
→ upward directional dominance
-DI > +DI
→ downward directional dominance
But this does not yet tell us how strongly one side dominates.
That leads to a new question:
How far apart are
+DI and -DI?
10. DX Keeps the Separation but Removes Direction
DX
=
100 ×
|+DI - -DI|
-----------
+DI + -DI
The absolute value changes the question.
large +DI advantage
→ large DX
large -DI advantage
→ large DX
DX therefore asks:
How strong is the
directional separation?
It does not say whether the dominant side is up or down.
11. ADX Smooths the Strength Measurement
DX can change sharply from one bar to the next. Wilder smooths DX to create ADX.
+DI / -DI
↓
directional separation
↓
DX
↓
Wilder smoothing
↓
ADX
The conceptual roles are now different:
+DI versus -DI
→ direction
ADX
→ strength of directional movement
This is why ADX itself has no bullish or bearish sign.
12. The Whole System Is a Sequence of Questions
How large was the relevant movement?
→ True Range
Which side expanded more?
→ +DM / -DM
How large is directional movement
relative to recent range?
→ +DI / -DI
How separated are the directions?
→ DX
How strong has that separation been
after smoothing?
→ ADX
This is much easier to remember than treating TR, +DM, -DM, +DI, -DI, DX, and ADX as unrelated formulas.
13. ATR and ADX Answer Different Questions
ATR
→ How large has recent movement been?
ADX
→ How strong has directional separation been?
Both belong to Wilder's framework, but volatility and trend strength are not the same quantity.
Review: What Is ATR? Build Average True Range with Python .
14. The Original Framework Included ADXR Too
Modern charting discussions often stop at ADX.
Wilder's original Directional Movement framework also included ADXR, the Average Directional Movement Index Rating.
TA-Lib defines ADXR as the average of the current ADX and an earlier ADX value.
ADX
→ trend-strength measure
ADXR
→ further-smoothed
trend-strength rating
This reminds us that the original system was broader than the single ADX line commonly shown today.
15. Be Careful with the Famous “25” Rule
Modern explanations often use a shortcut:
ADX above 25
→ trending market
That can be a useful convention, but it is not a universal law.
There is also a historical nuance. A 1985 article describing Wilder's original Directional Movement System reports a rule of thumb based on ADXR above 25 when deciding whether trend-following methods were appropriate.
modern shorthand
often:
ADX > 25
Wilder's broader framework:
included ADXR
and used ADXR in
market-selection logic
So we should not collapse the entire original framework into one modern threshold.
16. The Directional Movement System Was More Than an Indicator
The word System matters.
Historical descriptions of Wilder's framework include +DI/-DI crossover rules, an extreme-point rule, and filters for deciding when trend-following methods were appropriate.
Alphesta deliberately separates those layers.
measurement layer
→ TR
→ ATR
→ +DM / -DM
→ +DI / -DI
→ DX
→ ADX
strategy layer
→ entries
→ reversals
→ filters
→ risk rules
We learn the measurement layer first. Strategy claims belong later, where they can be defined precisely and backtested.
17. What the Architecture Suggests — An Alphesta Interpretation
The historical sources tell us what Wilder published. The following is an interpretation of the design structure, not a direct quotation from Wilder.
raw geometry
High / Low / Previous Close
↓
extract quantities
TR, +DM, -DM
↓
smooth noisy measurements
Wilder smoothing
↓
normalize
+DI, -DI
↓
compare competing directions
DX
↓
smooth again
ADX
Each stage removes one ambiguity.
price units
→ relative scale
up versus down
→ directional dominance
directional dominance
→ direction-independent strength
This layered design is one reason the system is such a useful teaching example, even before we ask whether a trading rule built from it is profitable.
18. Why This Matters for Python
The architecture also explains the code structure we built.
true_range()
wilder_average()
directional_movement()
+DI / -DI calculation
DX calculation
ADX smoothing
Each function corresponds to one conceptual transformation.
one mathematical idea
→ one testable block
tested blocks
→ compose into a larger indicator
19. The Core Path We Built
- What Is True Range? Measure Daily Price Movement with Python
- What Is Wilder’s Smoothing? Build Wilder Average from Scratch with Python
- What Is ATR? Build Average True Range with Python
- What Is Directional Movement? Build +DI and -DI with Python
- What Is ADX? Measure Trend Strength with Python
Before publishing this history article, verify that every Core Path URL above is live.
20. Historical Importance Is Not Proof of Trading Edge
historically influential
does not mean
automatically profitable
Nor does a familiar threshold become valid merely because it is widely repeated.
A trading researcher still needs to ask:
What exact rule
do we want to test?
On which market?
At which timeframe?
With which costs?
Against which baseline?
Those questions belong to later strategy and backtesting phases.
Check Your Understanding
- Wilder published both a Directional Movement Concept and a Directional Movement System in 1978.
- +DM and -DM describe upward and downward range expansion.
- True Range supplies a measure of relevant total movement.
- +DI and -DI normalize directional movement by smoothed True Range.
- +DI versus -DI helps describe directional dominance.
- DX measures the size of the separation between +DI and -DI without keeping direction.
- ADX smooths DX and therefore measures trend strength rather than bullish or bearish direction.
- Wilder's original framework also included ADXR.
- The modern “ADX above 25” shorthand should not be treated as a universal law or as the whole original system.
- The original Directional Movement System contained trading rules in addition to indicator calculations.
- Alphesta separates measurement from strategy so each claim can be tested later.
What You Just Learned
High / Low / Previous Close
↓
True Range
+
+DM / -DM
↓
Wilder smoothing
↓
+DI / -DI
↓
directional separation
↓
DX
↓
Wilder smoothing
↓
ADX
Direction
→ +DI versus -DI
Trend strength
→ ADX
If one idea stays in your head after this lesson, let it be this:
Wilder did not simply add one more line called ADX. The Directional Movement System is a layered attempt to turn the vague idea of trend into measurable components.
Sources
- J. Welles Wilder Jr., New Concepts in Technical Trading Systems, Trend Research, 1978 — Google Books bibliographic record and contents .
- Windsor Books — publisher page and table of contents .
- Thomas P. Drinka and Steven L. Kille, “A modification of Wilder's directional movement system,” Technical Analysis of Stocks & Commodities, 1985 — article record .
- TA-Lib official reference pages: TRANGE, PLUS_DM, MINUS_DM, PLUS_DI, DX, ADX, and ADXR.