The super non repaint arrow indicator marks moving average crossover signals that clear a volatility gate. It works on closed bars only, so a printed marker stays where it landed. Both plots sit on the price chart beside the candles.
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 | 2: BuyArrow, SellArrow |
| Alerts | popup, push notification |
| Inputs | 9 |
The visible output
BuyArrow and SellArrow carry every mark. BuyArrow drops a lime arrow below the bar where the fast line crossed up. SellArrow puts a red one above a downward cross.
Distance from the candle scales with volatility. InpArrowOffset defaults to 1.5 and multiplies the current average true range reading. Markers on a busy chart therefore sit further out.
The bar still forming never carries a mark. The loop skips the newest index, which is what keeps the output stable.
- BuyArrow: arrow, lime, width 2, arrow code 233
- SellArrow: arrow, red, width 2, arrow code 234

What the code actually computes
The crossing test
InpFastEMA defaults to 8 and InpSlowEMA to 21. The code reads both moving averages on the closed bar and on the bar before it. A fast value that sat at or below the slow one, then finished above it, counts as a cross up. The opposite pairing counts as a cross down.
The volatility gate
InpAtrPeriod defaults to 14 and sets the range window. InpAtrAvg defaults to 50 and sets how far back the code averages that reading. A cross prints only when the current value sits above its own average. Dead stretches drop out before anything reaches the chart.
Anchor time and repaint
InpAnchorTime holds an empty string out of the box, so every bar qualifies. Fill it with a date and time and the scan ignores everything at or before that stamp. Because each test uses finished bars, a mark stays fixed for the life of the chart.
How to use what it draws
Crosses need the gate to agree. A lime BuyArrow means the fast line crossed above the slow one while range was expanding. That is a tighter test than a plain cross.
Distance between the two lines after the mark shows how much follow-through came. A cross that narrows again within a bar or two usually fails.
Markers appear one bar late by design. The signal bar has to close first. Plan entries from the open of the next candle.
Alert channels in this build: popup and push notification, one message per closed bar.
InpEnableAlert arrives on and InpAlertPopup with it, while InpAlertPush waits until you switch it on. This build carries those two channels only, and the guard sends one message per new bar.
Every Super Non Repaint Arrow Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
InpFastEMA |
Fast EMA period. Fast EMA length in bars; a short value keeps it quick on intraday charts. | 8 |
InpSlowEMA |
Slow EMA period. Slow EMA length in bars; widen the gap to 34 or more for swing use. | 21 |
InpAtrPeriod |
ATR period. Bars in the range measure that feeds the gate; the shipped value matches common practice. | 14 |
InpAtrAvg |
ATR average lookback. Lookback for the average the gate compares against; longer values make it stricter. | 50 |
InpAnchorTime |
Anchor time YYYY.MM.DD HH:MM (empty=all bars). Leave it empty to scan the whole chart, or set a date and time to start from there. |
Display settings
| Setting | What it does | Default |
|---|---|---|
InpArrowOffset |
Arrow offset (ATR multiples). Marker distance in range multiples; lower it when markers sit too far from the candles. | 1.5 |
Alert settings
| Setting | What it does | Default |
|---|---|---|
InpEnableAlert |
Enable alert on signal. | on |
InpAlertPopup |
Popup alert. | on |
InpAlertPush |
Push alert. | off |

Picking a chart for it
Crossover systems want trends. The EURUSD H1 chart in the screenshot suits the shipped lengths. Majors on H1 or H4 give the gate enough range to work with. Short charts produce crosses faster than the filter can screen them. Test both lengths on your own data before you commit.
What it gets wrong
Ranges hurt crossover logic. Two averages that sit close together swap places again and again. The gate blocks the quietest of those, and it cannot block them all.
The gate itself creates a second problem. Large moves often start from a calm stretch, and that is exactly when the filter refuses the cross. The tool can miss the first leg of a trend.
Confirmation costs a bar. Waiting for the close is what makes the output stable. Your entry price then differs from the level where the cross happened.
Both lines lag by design. On a sharp turn the fast line needs several bars to swing under the slow one. The mark then lands well into the new move.
Copy the compiled Super Non Repaint Arrow 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.
Download the Super Non Repaint Arrow Indicator for MT4 and MT5
The zip holds the compiled Super Non Repaint Arrow 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
What does the gate on InpAtrAvg actually block?
It blocks crosses that happen while range sits below its own recent average. The code compares the current reading against the mean of the last few dozen. Only a higher current reading lets the mark through. Quiet sessions therefore give fewer marks than a plain cross would.
How do InpFastEMA and InpSlowEMA change the signal count?
They set the two EMA lengths. Narrowing the gap gives more crosses and more whipsaw. Widening it gives fewer, later marks that tend to survive longer. Most traders adjust the slow value first and leave the fast one alone until they know the market.
Does a printed arrow ever move afterwards?
No. The loop skips the forming bar, so every test runs on finished data. Once a candle closes, its cross result and its range reading cannot change, and the marker holds position. Reloading the chart or restarting the terminal gives the same set of marks.
When should I use InpAnchorTime on a EURUSD H1 chart?
Set it when history clutters the view. The scan then skips every bar at or before the stamp and marks only what came after. That helps if you want to study one session or one week. Leave the field empty and the build covers the whole chart.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the Super Non Repaint Arrow Indicator as one input. Always backtest before trading live.
Category: this is part of our Signal and Forecast collection. Browse more Signal and Forecast for MetaTrader, or explore every MT4 indicator and MT5 indicator on the site.
External references
- For background on this concept, see Certified Financial Technician on Wikipedia.
- For broader market context, see Positiontrader at Investopedia.
