Tripple Exponentially Smoothed Moving Average
systemic:core-trixIndicatorsfunction1 crInputs
| Name | Type | Description |
|---|---|---|
| Window | integer | The EMA period applied at each of the three smoothing stages. |
| Price | floatarray | The time series of price values used as input for TRIX calculation. |
Outputs
| Name | Type | Description |
|---|---|---|
| TRIX | floatarray | The TRIX line—a momentum oscillator showing the percentage rate of change of a triple exponentially smoothed moving average. |
The Problem TRIX Was Built to Solve
In the early 1980s, traders using moving average crossover systems faced a brutal reality: whipsaws.
Picture this scenario: Price crosses above your moving average—you buy. The next day it dips below—you sell at a small loss. Then it crosses back above—you buy again. This cycle repeats, each small loss compounding into significant drawdown, all while the market ultimately goes nowhere.
Jack Hutson, writing in Technical Analysis of Stocks & Commodities magazine, asked a simple question: What if we could filter out all the noise and only react to real trend changes?
His answer was aggressive: smooth the data not once, not twice, but three times. Then measure whether even this ultra-smooth line is rising or falling.
The Intuition: What Triple Smoothing Actually Does
Think of price data as a signal contaminated by noise at different frequencies:
flowchart TD
subgraph Noise["Price Contains Multiple Cycles"]
N1["🔊 Daily noise (random walk)"]
N2["📈 Weekly swings (mean reversion)"]
N3["📊 Monthly trends (momentum)"]
N4["🌊 Major trends (what we want)"]
end
subgraph Filter1["First EMA"]
F1["Removes daily noise ✓"]
end
subgraph Filter2["Second EMA"]
F2["Removes weekly swings ✓"]
end
subgraph Filter3["Third EMA"]
F3["Removes monthly oscillations ✓"]
end
subgraph Result["What Remains"]
R["Only major trend direction"]
end
Noise --> Filter1 --> Filter2 --> Filter3 --> Result
Each smoothing pass is like a low-pass filter in audio engineering—it removes higher-frequency components. By the third pass, only the underlying trend survives.
But here's the key insight: TRIX doesn't output this ultra-smooth line directly. It outputs the rate of change of that line. Why? Because we don't care about the absolute level—we care about whether the trend is accelerating or decelerating.
When TRIX is positive, the triple-smoothed average is rising. When it crosses zero, the trend has genuinely changed direction—not just wiggled.
Why Not Just Use a Longer Moving Average?
This is the natural question. If you want smoothness, why not just use a 100-period EMA instead of triple-smoothing a 15-period EMA?
The answer is lag behavior.
A very long single EMA responds slowly to everything—including genuine trend changes you want to catch. Triple smoothing has a different character: it's extremely unresponsive to noise but more responsive to sustained directional moves than an equivalently smooth single EMA.
flowchart LR
subgraph LongEMA["Long Single EMA (e.g., 100-period)"]
L1["Smooth ✓"]
L2["Slow to react to real trends ✗"]
L3["Uniform lag on all movements"]
end
subgraph TripleEMA["Triple EMA (e.g., 15×3)"]
T1["Equally smooth ✓"]
T2["Faster response to sustained moves ✓"]
T3["Variable lag: ignores noise, follows trends"]
end
Hutson's insight was that not all lag is equal. Triple smoothing creates selective lag—maximum delay for noise, minimum delay for genuine trend changes.
Reading TRIX: The Zero Line is Everything
Forget overbought/oversold levels. TRIX isn't RSI. The zero line is what matters:
| TRIX Position | Meaning |
|---|---|
| Above zero, rising | Strong uptrend, momentum increasing |
| Above zero, falling | Uptrend intact but weakening |
| Crossing down through zero | Major trend change: bullish → bearish |
| Below zero, falling | Strong downtrend, momentum increasing |
| Below zero, rising | Downtrend intact but weakening |
| Crossing up through zero | Major trend change: bearish → bullish |
The power of TRIX: When it crosses zero, you can have high confidence that something real has changed—not just noise.
When TRIX Shines (And When It Doesn't)
TRIX Excels At:
1. Position Trading / Swing Trading If you hold positions for weeks or months, TRIX helps you stay in trends longer without being shaken out by normal volatility.
2. Trend Filtering Use TRIX as a "regime detector": only take long trades when weekly TRIX > 0, only short when < 0. This keeps you aligned with the major trend.
3. Divergence Detection Because TRIX is so smooth, divergences between price and TRIX are meaningful. If price makes new highs but TRIX doesn't, the underlying trend momentum is genuinely weakening.
4. Multi-Asset Comparison TRIX is a percentage, so you can compare momentum across assets with different price levels. A TRIX of 0.3 means the same thing for a 1000 stock.
TRIX Struggles With:
1. Day Trading / Scalping The lag is simply too much. By the time TRIX confirms a move, day traders have already captured it.
2. Mean-Reverting Markets In choppy, range-bound markets, TRIX will eventually generate a zero-line cross—just in time for the range to reverse again.
3. Fast V-Shaped Reversals TRIX will miss the bottom of a V-reversal entirely. By the time it confirms the new uptrend, much of the move is over.
Creative Applications
1. The "Major Trend Bias" System
Set your trading bias based on weekly TRIX:
- Weekly TRIX > 0 → Only look for long entries on daily timeframe
- Weekly TRIX < 0 → Only look for short entries on daily timeframe
This simple filter eliminates many losing trades that go against the major trend.
2. Volatility Regime Detection
Apply TRIX to the VIX (or any volatility measure):
- TRIX of VIX crossing above zero → Volatility regime increasing, reduce position sizes
- TRIX of VIX crossing below zero → Volatility regime decreasing, normal position sizes
3. The "Confirmation Delay" Strategy
When you see a potential entry on faster indicators (RSI, MACD), wait for TRIX to confirm before entering with full size. Enter 1/3 position immediately, add remaining 2/3 when TRIX confirms.
4. Sector Rotation
Calculate TRIX for multiple sector ETFs. Overweight sectors where TRIX is positive and rising; underweight where it's negative and falling.
Configuration
This module takes a single parameter:
| Parameter | Default | Effect |
|---|---|---|
| Window | 15 | The EMA period applied at each of the three smoothing stages |
Window Selection Guide
| Your Goal | Window | Character |
|---|---|---|
| More signals, accept more noise | 9-12 | Swing trading on daily charts |
| Balanced (Hutson's original) | 14-15 | Position trading |
| Maximum smoothness, few signals | 18-25 | Long-term trend following |
Warmup note: TRIX needs exactly observed bars before producing its first value. For window=15, budget 43 observed bars of warmup; a closed-market gap (weekend, holiday) does not add to this count.
Missing Data
A gap (weekend, holiday, missing print) is None, never fabricated:
- Closed-market bars stay
None— never a carried-forward EMA-chain state, never a look-ahead value seeded from the series mean. - "Window" periods = window observed bars at each of the three EMA stages; the final percentage-change step also runs over observed bars, so a Friday-to-Monday gap bridges as adjacent bars (the real bridged rate of change), never nulled and never fabricated.
- Warm-up (fewer than observed bars) is
None, never a partial-smoothing value. - All-
Noneinput returns an all-Noneoutput at full length, never a crash.
Building a Complete System
This module outputs only the TRIX line. To add a Signal Line (for crossover signals), connect the output to an EMA module:
flowchart LR
subgraph This["This Module"]
T["TRIX Line"]
end
subgraph Add["Connect EMA Module"]
S["9-period EMA of TRIX"]
end
subgraph Use["Trading Signals"]
C1["TRIX crosses above EMA → Bullish"]
C2["TRIX crosses below EMA → Bearish"]
end
This --> Add --> Use
Combining with Other Modules
| Combination | Strategy |
|---|---|
| TRIX + RSI | Enter RSI signals only when TRIX confirms trend direction |
| TRIX + ATR | Size positions inversely to ATR when TRIX gives entry signals |
| TRIX + Volume | Require volume confirmation on TRIX zero-line crosses |
| TRIX (weekly) + MACD (daily) | Weekly TRIX for bias, daily MACD for timing |
On Comparisons to Other Indicators
You might expect a comparison table here ranking TRIX against MACD, RSI, and others on dimensions like "smoothness" or "lag." I've deliberately omitted this.
Why? Such comparisons require subjective scores that would be fabricated. The honest answer is: TRIX solves a specific problem (whipsaws in trend-following) through aggressive smoothing. It's not "better" than MACD or RSI—it's different. If you trade major trends and hate false signals, TRIX is worth exploring. If you trade short-term reversals, TRIX will frustrate you.
Choose your tools based on your trading style, not arbitrary comparison scores.
Historical Note
Jack Hutson introduced TRIX in 1983. The indicator emerged from a specific frustration: moving average systems of that era generated too many false signals in choppy markets. Hutson's contribution wasn't mathematical sophistication—triple EMAs are simple to compute—but the insight that aggressive smoothing followed by rate-of-change analysis could separate trend from noise more effectively than other approaches of the time.
Four decades later, TRIX remains useful precisely because the problem it solves—distinguishing real trends from noise—is timeless.
Further Reading
- Investopedia: TRIX Indicator
- TrendSpider: TRIX Indicator Explained
- Triple Exponential Moving Average
Indicator Assessment
The following chart positions TRIX based on its complexity (ease of understanding and implementation) versus reliability (consistency of signals across market conditions). Points closer to the top indicate higher reliability; points to the left indicate lower complexity.
quadrantChart
title TRIX Indicator Assessment
x-axis Low Complexity --> High Complexity
y-axis Low Reliability --> High Reliability
quadrant-1 Complex & Reliable
quadrant-2 Simple & Reliable
quadrant-3 Simple & Unreliable
quadrant-4 Complex & Unreliable
Stocks: [0.45, 0.70]
Crypto: [0.45, 0.60]
Assessment Breakdown
| Dimension | Stocks | Crypto | Notes |
|---|---|---|---|
| Popularity | 5/10 | 5/10 | Moderately known but overshadowed by MACD; niche following among trend-followers |
| Reliability | 7/10 | 6/10 | Excellent for major trends due to triple smoothing; struggles in sideways markets; crypto's volatility causes more false signals |
| Complexity | 4.5/10 | 4.5/10 | Concept is intuitive (smooth three times, measure rate of change); implementation straightforward |
| Versatility | 5.5/10 | 5.5/10 | Best for position trading and weekly charts; limited utility for short-term trading due to lag |
| Recent Interest | 4.5/10 | 5/10 | Steady but not growing in traditional markets; slight uptick in crypto for noise filtering |