A triple-smoothed momentum oscillator that measures the rate of change of a heavily filtered price series.
TRIX is a momentum oscillator built by smoothing price three times with exponential moving averages, then measuring how fast that smoothed line is changing. It was developed by Jack Hutson in the early 1980s and oscillates around a zero line. Because price is filtered three times before any momentum is measured, TRIX is designed to strip out short-lived noise and reflect mainly the more persistent component of a move. It is an educational tool for studying momentum and is not predictive; trading carries risk of loss.
TRIX is calculated in three steps. First, an exponential moving average (EMA) of closing price is taken over a chosen length (commonly 14 or 15). Second, an EMA of that result is taken, then a third EMA of that — producing a "triple-smoothed" EMA. Third, TRIX is the one-period rate of change of this triple EMA, conventionally expressed as a percentage (the change from the prior value divided by the prior value, multiplied by 100). The triple smoothing means each input price is effectively weighted to suppress fluctuations shorter than the chosen length, which is the source of TRIX's noise-filtering behavior and also its lag. The result is plotted as a single line around zero, and many charting platforms add an optional signal line (often a short EMA of TRIX) for comparison. Note that scaling conventions differ between platforms — some multiply by 100 (percent), some by a larger factor such as 10,000, and some apply the rate of change to the log of the smoothed series — so the same data can produce different y-axis values across tools while the line's shape stays the same.
Default length is commonly 14 or 15 periods, applied to closing price. An optional signal line is often a 9-period EMA of TRIX. Shorter lengths make TRIX more responsive but noisier; longer lengths smooth further and add lag. The rate of change is conventionally shown as a percentage (multiplied by 100), though some platforms use a larger scale such as 10,000 or a log-based variant, so y-axis values differ between tools.
//@version=6
indicator("TRIX", overlay = false)
length = input.int(15, "Length", minval = 1)
signalLength = input.int(9, "Signal Length", minval = 1)
// Triple-smoothed EMA of price
ema1 = ta.ema(close, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
// One-period rate of change, expressed as a percentage
trix = ema3[1] != 0 ? 100 * (ema3 - ema3[1]) / ema3[1] : 0.0
signal = ta.ema(trix, signalLength)
plot(trix, "TRIX", color = color.blue)
plot(signal, "Signal", color = color.orange)
hline(0, "Zero", color = color.gray)Pro tip: Because TRIX is heavily smoothed, its readings lag by design. Many traders treat it as a momentum-context tool — confirming or questioning what price is already showing — rather than a standalone trigger, and pair it with price structure or a faster reference to offset the lag. Nothing here is advice, and trading carries risk of loss.
Educational only — not financial advice, not a recommendation to trade. No indicator is predictive; trading involves substantial risk of loss.