The 10 non repaint indicator is a Donchian channel breakout tool for MT4 and MT5. It draws two dodger blue lines on the price chart. They mark the highest high and the lowest low of the prior 20 bars, set by ChannelPeriod. A lime arrow prints under a bar that trades above the upper line. A red arrow prints above a bar that trades below the lower line.
This build ships as 10-non-repaint-indicator-indicator-forexmt4systems.ex4 for MT4 and 10-non-repaint-indicator-indicator-forexmt4systems.ex5 for MT5; the screenshots below come from EURUSD H1.
| Platforms | MT4 (.ex4) + MT5 (.ex5) |
|---|---|
| Chart window | Main price chart |
| Plots | 4: Donchian High, Donchian Low, Buy, Sell |
| Alerts | popup, push notification, email, sound |
| Inputs | 8 |
What the 10 Non Repaint Indicator draws on the chart
Donchian High is a dodger blue line, width 2. It sits on the highest high of the ChannelPeriod bars before the current one. Donchian Low is its twin on the lowest low of the same window. Both skip the current bar. So the channel you see at bar open cannot move during that bar.
The Buy plot is a lime arrow, code 233. It prints ArrowOffsetPoints below the low of any bar whose high pokes above Donchian High. Sell, a red arrow with code 234, goes the same distance the other way. It prints above the high of a bar whose low drops under Donchian Low. At the default ArrowOffsetPoints of 30 the arrows sit 30 points clear of the candle.
All four plots sit on the main price chart. Nothing draws in the first ChannelPeriod plus one bars of history. The draw-begin waits for a full window.
- Donchian High: line, dodger blue, width 2
- Donchian Low: line, dodger blue, width 2
- Buy: arrow, lime, width 4, arrow code 233
- Sell: arrow, red, width 4, arrow code 234

How the 10 Non Repaint Indicator calculates its values
The prior-bar channel
The loop starts one bar back. For each bar i, hh begins at high[i+1] and ll at low[i+1]. It then walks k from 2 up to ChannelPeriod. It keeps the larger high and the smaller low. Those values fill the buffers behind Donchian High and Donchian Low. The current candle can never push the channel it is trying to break.
Arrow test
Once the channel exists, the code compares the current bar with it. If high[i] is above hh, the Buy buffer gets low[i] minus the arrow offset. If low[i] is below ll, the Sell buffer gets high[i] plus the offset. Both tests can pass on one wide bar.
Why the arrows stay put
A bar’s high can only rise while it forms. So an arrow that prints mid-bar cannot vanish at the close. The channel reads only closed bars. On later ticks the loop revisits just the newest bars. Finished bars keep their values.
How to read the signals
A lime arrow means the candle broke the prior 20-bar high. That is a classic Donchian breakout long. A red arrow over a candle means price dropped under the prior 20-bar low.
The lines also serve as a trailing reference. After a lime arrow, Donchian Low tends to rise bar by bar as the window shifts. Many breakout traders run a stop along it.
Because the test runs on the live bar, an arrow can print before the bar closes. The alert reads bar 1 instead. So it only speaks for a completed bar.
Alert channels in this build: popup, push notification, email and sound, one message per closed bar.
Alerts run through popup, push, email and sound, each with its own toggle. They fire once per closed bar. The dispatcher reads bar 1 and remembers the last bar time.
Every 10 Non Repaint Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
ChannelPeriod |
ChannelPeriod (default 20) sets how many prior bars feed Donchian High and Donchian Low; raise it for fewer, larger breakouts or lower it for faster but noisier arrows. | 20 |
Display settings
| Setting | What it does | Default |
|---|---|---|
ArrowOffsetPoints |
ArrowOffsetPoints (default 30) is the gap in points between a candle and its arrow; increase it on high-priced symbols so the arrows do not sit on the wicks. | 30 |
Alert settings
| Setting | What it does | Default |
|---|---|---|
EnableAlerts |
master toggle. | on |
EnablePopup |
MT4 popup dialog. | on |
EnablePushNotify |
mobile MT4 push notification. | off |
EnableEmail |
SMTP email (configure in MT4 Tools > Options > Email). | off |
EnableSound |
play sound file from MT4/Sounds/. | off |
SoundFile |
(see inputs panel) | alert.wav |
10-non-repaint-indicator-inputs-settings.webp(will appear here after upload)
Settings that fit your chart
Try EURUSD H1. A 20-bar window there covers most of a trading day. The same logic suits any liquid symbol with clean trending phases. Think major forex pairs, gold or index CFDs. Shorter charts like M5 fire more often and pay more spread per signal. H4 and daily give fewer arrows with wider stops.
When the 10 Non Repaint Indicator fails
Range-bound markets are the weak spot. In a sideways chop price pokes above the channel and prints a lime arrow. Then it rolls back inside and prints a red arrow a few bars later. A run of alternating arrows is the tool telling you there is no trend to ride.
Arrows arrive after the move has started. The bar has already cleared a 20-bar extreme. So entries sit at a worse price than the breakout level, and stops end up wide.
A single spike inside the window pins the channel. One big wick keeps Donchian High far from price for 20 bars. No long arrow can print until that bar rolls out of the lookback.
Copy 10-non-repaint-indicator-indicator-forexmt4systems.ex4 into MQL4/Indicators and 10-non-repaint-indicator-indicator-forexmt4systems.ex5 into MQL5/Indicators, then restart the terminal and drag the 10 Non Repaint Indicator onto a chart. The step-by-step guide with screenshots is at how to install MT4 and MT5 indicators.
Background reading on the method behind the 10 Non Repaint Indicator: Financial signal processing on Wikipedia, John Murphys 10 Laws Of Technical Trading at StockCharts ChartSchool.
Download the 10 Non Repaint Indicator for MT4 and MT5
The zip 10-non-repaint-indicator-indicator-forexmt4systems.zip holds 10-non-repaint-indicator-indicator-forexmt4systems.ex4, 10-non-repaint-indicator-indicator-forexmt4systems.ex5 and a short README, compiled files only. 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
Why does the Donchian High line ignore the current bar?
The scan starts at high[i+1], so the current candle is never part of its own channel. That is what makes a break testable. The line you see when a bar opens stays put for that bar. The arrow compares the new high or low against it.
What does ChannelPeriod change on the chart?
ChannelPeriod (default 20) is the number of prior bars the channel reads. A larger value widens the band and keeps the two dodger blue lines flatter. It thins the arrows out to major breaks. A smaller value hugs price, so arrows come sooner and more often. More of them fail in chop.
Can one bar carry both a Buy arrow and a Sell arrow?
Yes. The two tests run independently on every bar. A wide candle can clear the prior 20-bar high and break the prior 20-bar low at once. That bar passes both. A lime arrow then prints under it and a red arrow above it. News spikes do this.
Does the 10 non repaint indicator repaint its arrows on EURUSD H1?
No. The arrow test compares the forming bar’s high or low against a channel built only from closed bars. A bar’s high cannot fall back once printed. So an arrow that appears mid-bar stays after the close. The lines move only when a new bar opens and the window shifts by one.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the 10 Non Repaint Indicator as one input. Always backtest before trading live.
