Categories

Schaff Trend Cycle Indicator MT4
If you have ever felt like MACD signals arrive a bar or two too late, the Schaff Trend Cycle was built to close that gap. This free MT4 version — a straightforward conversion of the original FostarFX release — plots a single oscillating line in its own sub-window and can be downloaded and dropped into…
Download the Schaff Trend Cycle Indicator MT4If you have ever felt like MACD signals arrive a bar or two too late, the Schaff Trend Cycle was built to close that gap. This free MT4 version — a straightforward conversion of the original FostarFX release — plots a single oscillating line in its own sub-window and can be downloaded and dropped into your Indicators folder in under a minute.
What Is the Schaff Trend Cycle Indicator?
The Schaff Trend Cycle (STC) is a cycle-corrected oscillator. Instead of just smoothing price like a moving average or measuring pure momentum like RSI, it takes a MACD-style value and re-normalizes it against its own recent high/low range, then applies a final exponential smoothing pass. The result is an oscillator that reacts to trend changes faster than a standard MACD while still filtering out a lot of the whip noise you get from raw momentum indicators.
In this build, the calculation runs in two stages. First it builds a MACD-like differential by subtracting a long EMA of the typical price from a short EMA of the typical price (using the MAShort and MALong periods). Second, it takes that differential and calculates where it sits between its own highest and lowest values over the last Cycle readings — a stochastic-style normalization that forces the value into roughly a 0–100 range. That normalized value is then smoothed with an exponential moving average whose speed is derived from the Cycle input. Only the final smoothed line is plotted; the raw normalized value is calculated internally but never drawn to the chart.
The indicator window is scaled from -10 to 110, giving the plotted line some breathing room above 100 and below 0 rather than clipping at the edges.
Key Features
- Single-line oscillator plotted in a separate window, scaled roughly 0–100
- Built from two EMAs of the typical price (
MAShortandMALong), not raw close price - Stochastic-style re-normalization of the MACD differential over a configurable
Cyclelength - Final exponential smoothing pass for a cleaner, less jagged line than a raw MACD histogram
- Adjustable recalculation depth via
CountBarsfor controlling how much history is processed
How to Use It
Download the file and place Schaff Trend Cycle.mq4 in your MetaTrader 4 MQL4/Indicators folder, then restart MT4 or refresh the Navigator panel. Drag the indicator onto any chart; it will open in its own window beneath the price chart.
Because the line is bound approximately between 0 and 100, most traders treat readings above roughly 75 as an overbought/extended-up condition and readings below roughly 25 as an oversold/extended-down condition — the same convention used with the original Schaff Trend Cycle formula. Note that this version does not draw those 25/75 levels automatically; you would need to add horizontal lines manually if you want a visual reference.
The two most common ways traders read this line are: (1) direction changes — when the line turns up from a low reading or turns down from a high reading, it is often read as an early trend-shift signal, and (2) threshold crosses — a cross back above 25 after dipping below it, or back below 75 after pushing above it, is commonly used as a trigger for entries in the direction of the new move. Because the underlying MACD differential and the stochastic re-normalization both use closed-bar EMA values, the line tends to respond a little quicker at turning points than a plain MACD line does, which is the entire premise of the Schaff Trend Cycle concept.
Keep an eye on the CountBars input if you run this on a slow VPS or a chart with a very long history — it controls how far back the indicator recalculates on every tick, and a very large value can add unnecessary CPU load.
Best Timeframes / Best Use Cases
The default periods (MAShort 23, MALong 50, Cycle 10) were built around the same general balance the original Schaff Trend Cycle targets — a medium-speed trend/cycle filter rather than a scalping-grade signal. It tends to be most useful on H1 and above, where trend swings last long enough for the cycle-normalization step to mean something. On very low timeframes the short lookback windows can produce a choppier line, so traders who want to use it intraday often lengthen Cycle slightly to compensate. It works well paired with a trend filter (a longer moving average or a higher-timeframe bias) rather than being used completely standalone, since like any oscillator it can stay in overbought/oversold territory during a strong trend.
Final Thoughts
This Schaff Trend Cycle build is a faithful, no-frills conversion — one plotted line, four real inputs, no arrows, no alerts, no clutter. If you already use MACD-based tools and want something that reacts a bit sooner to genuine trend shifts without adding a second indicator window full of extra lines, it is a clean drop-in option. As with any oscillator, treat it as a timing and confirmation tool alongside price structure and a higher-timeframe trend read, not as a standalone signal generator.
- MAShort (default 23) — Period of the short EMA of the typical price used to build the internal MACD-style differential.
- MALong (default 50) — Period of the long EMA of the typical price used to build the internal MACD-style differential.
- Cycle (default 10) — Lookback length for the stochastic-style high/low normalization step and the speed of the final smoothing pass.
- CountBars (default 300) — Number of historical bars recalculated on each tick; set to 0 to use all available bars on the chart.
FAQs About the MT4 Schaff Trend Cycle Indicator MT4
Is the Schaff Trend Cycle indicator repainting?
No. Every value in the calculation — the two EMAs of the typical price, the stochastic-style normalization, and the final smoothing pass — is built by looping through bars from oldest to newest and only ever referencing the current or older bars. There is no point in the code where a future or newer bar’s data is used to recalculate a past bar, so closed-bar values are not retroactively changed.
What do the MAShort and MALong inputs actually control?
They are the periods of two exponential moving averages of the typical price ((High+Low+Close)/3). The indicator subtracts the long EMA from the short EMA to build a MACD-style differential, which is then fed into the stochastic normalization step. Defaults are 23 and 50.
Does this indicator plot overbought/oversold lines?
No horizontal reference lines are drawn automatically. The indicator window is simply scaled from -10 to 110 so the line has room to move; if you want visual 25/75 markers you’ll need to add them yourself as chart objects.
What does the Cycle input do?
Cycle sets the lookback length used to find the highest and lowest recent value of the MACD differential (the stochastic-style step) and also determines the speed of the final exponential smoothing pass. A smaller Cycle reacts faster but is noisier; a larger Cycle is smoother but slower to turn.
Why does the indicator have a CountBars input?
CountBars controls how many historical bars the indicator processes each time it recalculates. It’s a performance/depth control rather than a signal setting — set it to 0 to have it automatically size to all available bars on the chart.
Can this replace MACD entirely?
It’s built from a MACD-style differential internally, so it behaves similarly at a conceptual level, but the extra stochastic normalization and smoothing steps change how it turns at highs and lows. Many traders run it alongside MACD or price structure rather than as a full replacement.
