This jurik moving average indicator builds an adaptive average from tools MetaTrader already has. It blends two exponential averages. The blend weight moves with volatility. A faster market gives the short average more say. You get two lines that tighten in trends and widen out in chop. This is not Jurik Research’s proprietary JMA. The maths below is exactly what the code does.
This build ships as a compiled .ex4 for MT4 and .ex5 for MT5; the screenshots below come from EURUSD H1.
| Platforms | MT4 (.ex4) + MT5 (.ex5) |
|---|---|
| Chart window | Main price chart |
| Plots | 4: JMA Fast, JMA Slow, Buy, Sell |
| Alerts | popup |
| Inputs | 7 |
What the Jurik Moving Average Indicator draws on the chart
JMA Fast is the dodger blue line. It leans toward the shorter average when volatility rises.
JMA Slow is the orange line, always the steadier of the two.
Buy places a lime arrow beneath the bar where the fast line crosses above the slow one.
Sell places a red arrow above the bar on the opposite cross.
- JMA Fast: line, dodger blue, width 2
- JMA Slow: line, orange, width 2
- Buy: arrow, lime, width 2, arrow code 233
- Sell: arrow, red, width 2, arrow code 234

How the Jurik Moving Average Indicator calculates its values
Two ordinary EMAs first
The code calls iMA twice on the close. One call uses `InpFastEMA` bars, the other `InpSlowEMA`. That gives emaFast and emaSlow. Nothing adaptive has happened yet. These are the raw ingredients.
Measuring how fast the market moves
An ATR over `InpATRLength` bars meets a longer ATR average over `InpATRAvgLength` bars. Their quotient becomes ratio, and w takes MathSqrt of it. When current volatility matches its own baseline, ratio sits near 1.0 and so does w. A burst of movement lifts w above 1.0. A quiet stretch drags it below.
Blending by that measurement
fastShare comes from w as (w – 0.30) / 1.40. That maps the volatility reading onto a mixing weight. jmaFast then takes emaFast * fastShare + emaSlow * (1.0 – fastShare). A high reading pulls the blue line toward the short average. jmaSlow uses the same weight in reverse and stays nearer the long average. `InpAdaptStrength` scales how far this goes. Crossings between the two lines create the arrows, `InpArrowOffsetPt` points clear of the candle.
How to read the signals
The gap between the two lines is the trend reading. Wide and parallel means a move with some conviction.
Lines that converge without crossing show the adaptation at work, usually as volatility falls back to its baseline.
Arrows come from the crossover alone. No separate trend filter sits on top.
Both lines shift their weighting together, so a cross during a volatility spike arrives sooner than a raw EMA cross would.
Alert channels in this build: popup, one message per closed bar.
Cross alerts arrive as a terminal popup and nothing else. `InpEnableAlerts` ships `true`. The message waits for the bar to close, so a cross that appears mid-bar and unwinds before the close never reaches you.
Every Jurik Moving Average Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
InpFastEMA |
Fast EMA length. Length of the short average, default `10`. This sets the floor on how quick the blue line can get. | 10 |
InpSlowEMA |
Slow EMA length. Length of the long average, default `30`. Widen the gap to `10` and `50` for fewer, slower crosses. | 30 |
InpATRLength |
ATR length. Bars in the current volatility reading, default `14`. | 14 |
InpATRAvgLength |
ATR average length (volatility baseline). Bars in the baseline it compares against, default `50`. A shorter baseline makes the adaptation twitchier. | 50 |
InpAdaptStrength |
Volatility blend strength (0..1). How strongly volatility moves the blend, default `0.50`. Near 0 the pair behaves like plain EMAs. | 0.50 |
Display settings
| Setting | What it does | Default |
|---|---|---|
InpArrowOffsetPt |
Arrow offset (points). | 12 |
Alert settings
| Setting | What it does | Default |
|---|---|---|
InpEnableAlerts |
Enable cross alerts. | on |

Settings that fit your chart
Adaptive averages earn their keep where volatility shifts through the session. That fits the majors around the London and New York handover. EURUSD on H1 is the reference chart. On daily bars the ATR ratio moves slowly. The adaptation adds little there, and you sit close to a plain 10 and 30 crossover. On M1 the ratio swings hard and the blend can shift bar to bar.
When the Jurik Moving Average Indicator fails
A crossover system still sits underneath. A sideways drift crosses the two lines again and again with no follow-through.
Both averages lag by design. Blending them does not remove that. The adaptation changes how much lag you get, not whether you get any.
One volatility spike skews the ratio while it stays inside the ATR window. The blend can lean the wrong way after the move that caused it ends.
Copy the compiled Jurik Moving Average Indicator file into your MQL4/Indicators folder, and the MT5 build into MQL5/Indicators, then restart the terminal and drag it onto a chart. The step-by-step guide with screenshots is at how to install MT4 and MT5 indicators.
Related on forexmt4systems.com: Moving Average Crossover Strategy.
Download the Jurik Moving Average Indicator for MT4 and MT5
The zip holds the compiled Jurik Moving Average Indicator build for MT4 and MT5, plus a short README. Compiled files only, no source. Enter your email below and the download link arrives in your inbox.
Download this indicator free
Enter your email and the file is yours. You also get the full MT4 and MT5 library.
FAQ
Is the JMA Fast plot the same as Jurik Research’s JMA?
No, and the page should not suggest otherwise. The genuine JMA is a proprietary algorithm nobody has published. This build makes an adaptive average from standard MetaTrader functions: two EMAs blended by the ratio of current ATR to its own longer average. The behaviour is comparable in spirit. The internals differ, and the section above describes them fully.
What does InpAdaptStrength change?
It sets how far the volatility reading can move the blend. At the default `0.50` the code applies the adaptation at half strength. Take it toward 1.0 and JMA Fast swings hard between the short and long averages as conditions change. Take it toward 0 and you effectively run a fixed 10 and 30 EMA pair.
Why does InpATRLength get compared against another ATR average?
A raw ATR value means nothing alone, because 12 pips is calm on gold and wild on EURCHF. Dividing current ATR by its own 50-bar average gives a unitless number centred on 1.0, which reads the same on every instrument. That is what makes one setting transferable across symbols.
Do the Buy arrows appear on the signal bar or the next one?
On the bar where the cross completes, `InpArrowOffsetPt` points clear of the candle, which defaults to `12`. The popup alert waits until that bar closes. If you watch live, an arrow can appear and then vanish when price moves back before the close.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the Jurik Moving Average Indicator as one input. Always backtest before trading live.
Category: this is part of our Trend collection. Also, browse more Trend for MetaTrader, or explore every MT4 indicator and MT5 indicator on the site.
External references
- For background on this concept, see Moving average rate procedure on Wikipedia.
- For broader market context, see Distance From Moving Average at StockCharts ChartSchool.
