Skip to main content
Education
Contents
10 min read

Trend Filters

Smooth, slope, and directional-strength measures for describing persistent movement.

A trend filter describes direction at a chosen horizon

A trend is a tendency for price to keep moving in one direction for long enough to matter to a particular decision. It is not every higher close, and it is not one objective state that all observers must see. The same market can be rising over six months, falling over twenty bars, and moving sideways inside the current session.

A trend filter turns that irregular price path into a simpler directional reference. It may smooth price, compare two horizons, estimate a slope, measure directional strength, or assign a state such as uptrend, downtrend, or range. The simplification makes a path easier to describe consistently; it also discards detail.

That trade-off is the central idea. A responsive filter follows turns quickly but reacts to more short-lived noise. A stable filter ignores more noise but recognizes genuine turns later. There is no universally correct amount of smoothing because the intended holding period and decision frequency determine which delay is acceptable.

A filter is also not a forecast by itself. “Price is above its 50-bar average” describes the relationship between current price and a recent reference. Whether that state should support continuation, block a counter-trend trade, or trigger an exit is a separate strategy decision.

Five different measurements share the trend-filter label

Signals in this family can all help describe trend, but they do not answer the same question. Treating them as interchangeable “trend indicators” hides the information each one actually contributes.

Smoothed price reference

Simple and exponential moving averages, the Hull Moving Average, Kaufman's Adaptive Moving Average, the Arnaud Legoux Moving Average, and the SuperSmoother all produce a quieter version of recent price.

What to read: whether price is above or below the reference, and whether the reference itself is rising or falling.

What not to infer: that the smoothed line is fair value or a prediction of the next price.

Ordering between two horizons

A fast/slow stack compares a short reference with a longer one. When the fast average is above the slow average, recent prices have pulled the short reference above the longer history.

What to read: the persistent ordering and the size of the spread between the two references.

What not to infer: that every bar with a positive spread is a new crossover or a new entry.

Slope or fitted direction

A moving-average slope measures how quickly a smoothed reference is changing. A rolling regression fits a straight line through the selected window and reports its average change per bar.

What to read: the sign of the slope for fitted direction and its magnitude in the units supplied by the signal.

What not to infer: that the fitted line continues into the future, or that raw slopes are comparable across differently priced instruments.

Directional strength and recency

The Directional Movement Index (DMI) compares positive directional movement with negative directional movement through +DI and -DI. The Average Directional Index (ADX) summarizes how pronounced that separation has been without supplying the direction itself. A rising ADX can therefore accompany either an advance or a decline.

Aroon asks a different question: how recently the highest high and lowest low occurred inside the selected window. It measures recency, not the distance price travelled.

What to read: direction from +DI versus -DI, strength from ADX, and high/low recency from Aroon.

What not to infer: that a high ADX is bullish or that a recent high implies a large upward return.

Stateful and model-based references

SuperTrend maintains an active volatility-adjusted band and directional state. A Kalman trend filter estimates a level and velocity under explicit noise assumptions. Arizmic's Trend Regime combines several simpler measurements into a categorical label.

What to read: the state together with the measurements and assumptions that created it.

What not to infer: that a more elaborate model has uncovered a hidden, error-free “true trend.”

Smoothing always exchanges noise for delay

A short moving average reacts quickly but crosses price and other averages often. A long average changes slowly and can remain pointed in the old direction after a reversal. More elaborate filters alter this trade-off; none eliminates it.

Illustrative sequence. Imagine price rising steadily and then reversing abruptly:

MomentPrice pathFast filterSlow filter
Before the turnA sustained advanceRises close behind priceRises more gradually
First new declinePrice changes directionBegins to flatten or turnUsually continues rising
Several observations laterThe decline persistsClearly points downFinally flattens or turns

The slow output is not wrong. It answers a longer-horizon question. Trouble begins when a researcher interprets it as a current turning-point detector.

Illustrative price reversal with fast and slow filters showing different turning delays.

The diagram should be read horizontally. Both filters receive the same price path, but the slow filter retains more of the earlier advance after price turns. That delay can reduce false turns in noisy periods and worsen exits after abrupt reversals. “Less lag” therefore cannot be judged without the extra state changes it permits.

Separate the reading, state, transition, and action

Illustrative example. Suppose a completed bar produces a fast average of 105 and a slow average of 103. The spread is positive by two price units, and it has already been positive for nine bars.

LayerWhat this example containsWhat it means
Signal valuesFast 105, slow 103, spread +2The two filtered levels and their current separation
Persistent stateFast remains above slowShorter-horizon price remains above the longer reference
Transition eventNo new cross on this barThe ordering did not change at this decision time
Strategy actionNot specifiedEntry, eligibility, sizing, and exit still require explicit rules

This distinction prevents a common implementation error: treating a state that lasts for many bars as if it were a fresh event on every bar. It also keeps the calculation separate from assumptions about when an order can be submitted or filled.

Compare outputs before selecting a signal

Filter familyTypical outputGood questionCommon misread
Average levelsmoothed priceIs price above a recent reference?The average predicts the next price
Fast/slow stacktwo levels and spreadIs recent direction stronger than long direction?Every positive bar is a new entry
Cross eventup/down flagDid ordering change at this completed event?The fill occurred at the crossing price
Slope/regressionslope or fitted directionIs the reference rising and by how much?Raw slopes compare across instruments
Strength/recencyADX, DMI, AroonIs movement directional or recently extreme?High strength always means bullish
Adaptive/model filterstate estimate and diagnosticsShould smoothing react differently to noise?Extra parameters remove uncertainty

A signal reading becomes a strategy only after role is declared

The same positive trend filter can be used in several ways:

  • Entry trigger: move from flat to long when the state changes.
  • Eligibility filter: allow a separate breakout only during positive trend.
  • Exit: close a long position after the state turns negative.
  • Position scale: vary exposure with strength.
  • Regime label: compare how another strategy behaves in rising and falling states without trading the filter directly.

Changing the role changes the strategy. A filter that improves a mean-reversion rule by preventing trades against a strong trend has not demonstrated that the filter itself is a profitable trend strategy.

Window choice is part of the hypothesis

A 10-bar filter and a 200-bar filter describe different horizons. Testing many lookbacks and reporting the winner creates a selection problem. A stronger experiment declares a plausible neighborhood, compares turnover and lag, and asks whether the conclusion survives nearby choices and later data.

Warm-up also matters. An output should not be treated as valid before the filter has enough observations or its initialization has stabilized. Missing bars and session resets can change the effective window.

How to investigate a trend filter

  1. Start with one transparent filter and one horizon.
  2. Plot price, the filter, and the exact completed decision events.
  3. Measure how often the state changes and how long it persists.
  4. Compare the underlying strategy with and without the filter.
  5. Inspect performance in trends, ranges, gaps, and abrupt reversals.
  6. Apply the same timing and cost model to every alternative.
  7. Examine a parameter neighborhood rather than one best lookback.

False readings to avoid

  • A smooth rising line can be a delayed description of a move that has ended.
  • Several moving averages calculated from the same prices are not independent confirmation.
  • A high ADX value does not by itself say “up.”
  • A completed-bar cross cannot justify a fill earlier inside that bar.
  • Raw price slope is scale-dependent across instruments.
  • A filter with fewer state changes can look better merely because it trades less and pays fewer modeled costs.
  • Adaptive filters add model and initialization assumptions; they do not reveal a hidden true trend.

Shipped signals in this family

Try it in Arizmic

Included with Arizmic

14 prebuilt signals in this family

Use the shipped trend filters as reusable measurements inside a strategy rather than treating a smooth line as a strategy by itself.

  • Choose a price reference, a directional-strength measure, or a categorical regime for the role you actually need.
  • Distinguish a persistent state such as price above an average from a one-bar event such as a crossover.
  • Compare turning delay and whipsaw together; reducing one usually changes the other.

Ask the AI Companion

Draft a custom trend filter

Signal draft

Create a reviewable Signal Program draft with explicit inputs, parameters, outputs, warmup, and timing.

Draft a custom trend-filter signal for [market and bar interval]. I want it to measure [smoothed direction, directional strength, crossover, or regime] over [horizon]. Use catalog-backed inputs [list], emit outputs [continuous values and/or event flags], make every window and threshold configurable, and state warmup and completed-bar timing. Explain how it differs from [nearest shipped signal]. Return a typed signal_draft for review only; do not save it, run a Study, generate arbitrary Python, or execute anything.

Ask the AI Companion

Explore ways to use trend filters

Research critique

Turn one or more shipped outputs into clearly separated strategy roles and falsifiable ideas.

I am considering [shipped trend signal or signals] for [market, horizon, and strategy idea]. Explain which outputs are levels, strength readings, persistent states, or transition events. Suggest three distinct uses—as an eligibility filter, timing event, exit, or sizing input—and identify one nearby shipped alternative for each. Keep decision time, lag, warmup, and whipsaw visible. Do not combine the ideas into an autonomous strategy or execute anything.

Personal notebook

Extend it in Marimo

Prepared Data

Open a personal Marimo notebook from typed Prepared Data so the price series and provenance stay explicit.

See exactly how smoothing choice changes lag, state duration, and disagreement.

Bring in
completed-bar close, two selected trend-filter outputs, their windows and warmup masks, optional crossover or regime flags
Build
price with both filters and turning points, lag-at-turn table, state-duration and disagreement plots

How to read it: Focus on when filters disagree and whether one merely delays the same state change. A smoother line can look cleaner because it changes less often, not because it identifies direction better.

Value origin: Charts and diagnostics computed in the notebook are notebook-derived; keep them distinct from engine-reported signal outputs.

With Companion: Ask the Companion for a cell draft that reads only the selected typed context, then inspect the preview and diff before explicitly applying it.

Further reading