What is a non-repaint indicator?
Three different behaviours get called “repainting” and they are not equally bad. Here is what the word actually means, why it quietly ruins backtests, and how to test any indicator yourself in about ten minutes.
A non-repaint indicator is one whose output never changes after a bar has closed. What you saw at 10:15 is still there tomorrow, in the same place. A repainting indicator rewrites its own history — which is why its chart looks so much better than its results.
This page explains what repainting actually is, why it quietly destroys backtests, and how to test any indicator yourself in about ten minutes. Including mine.
Three different things get called “repainting”
Most arguments about this are people talking past each other, because the word covers three behaviours that are not equally bad.
1. Recalculating on the forming bar — normal
While the current bar is still open, its high, low and close are still moving, so any indicator reading them is still moving too. An arrow that flickers on the live bar and settles when it closes is not repainting. It is doing arithmetic on data that has not finished arriving.
This is the behaviour people most often mistake for cheating. It isn't.
2. True repainting — the real problem
The value for a closed bar changes later. The signal was there yesterday and is gone today, or it has moved two bars left. Anything built on swing highs and lows that are only confirmed in hindsight — ZigZag being the classic — behaves this way by design, because a swing point is not knowable until price has moved away from it.
Used as a drawing tool that is fine. Sold as an entry signal it is not, because the version of the chart you are shown never existed while it was tradeable.
3. Backpainting — the dishonest one
The signal is calculated late but drawn at the earlier bar where it would have been perfect. The chart is immaculate: every arrow sits at the exact turn. In live trading the arrow appears three bars after that turn, by which time the move is gone.
This is the behaviour that sells screenshots, and it is the hardest to catch, because nothing ever changes once it is drawn. It was simply never available at the time it claims.
Why it wrecks a backtest
A backtest is an attempt to answer one question: if I had been sitting there, what could I have done? Every form of repainting answers a different question — what could I have done if I had known how it turned out?
The damage is not a small bias. A signal that knows where the swing ended is close to a perfect entry, so the curve looks extraordinary rather than merely good. If you have ever tested a system that produced an almost unbroken equity line in the tester and bled money live, this is the most likely explanation.
How to test any indicator yourself
You do not need the source code and you do not need to take anyone's word for it.
The screenshot test — catches true repainting
- Load the indicator on a live chart and let a few signals print.
- Screenshot the chart, including the time axis, and note the time.
- Come back several hours later, or the next day, on the same chart and timeframe.
- Compare the two images bar by bar.
Any arrow on an already-closed bar that has moved, vanished or newly appeared is repainting. Ignore whatever is happening on the rightmost, still-forming bar.
The forward-walk test — catches backpainting
This is the one that catches the dishonest case, and almost nobody does it.
- Watch the chart live and write down the exact time you first saw each signal appear — not the bar it is sitting on.
- Later, compare what you wrote down against where the arrows now sit.
If an arrow sits on the 10:00 bar but you first saw it at 10:45, it is backpainted. The chart will never tell you this, because the arrow does not move. Only your own timestamps reveal it.
The visual-mode test — fastest
In MetaTrader 5, run the indicator through the Strategy Tester in visual mode and step forward bar by bar. Signals that appear and later vanish are repainting in front of you. It is quick, though it is less reliable for backpainting than the forward-walk above.
If you have the source
With an .mq5 file you can look directly. In series indexing, index 0 is the newest
bar and higher indices are older — so a value written for bar i that is computed
from bar i-1 is reading a bar that had not formed yet. Signals derived from a confirmed
swing point, or from any buffer that is itself revised later, carry the same problem.
You cannot do this with a compiled .ex4 or .ex5 — which is most of
what is sold. That is exactly why the behavioural tests above matter more than reading code.
What a non-repaint claim should actually mean
When someone says non-repaint, hold them to three things:
- Closed bars are final. A value printed for a closed bar never changes.
- No backdating. The signal appears at the bar it refers to, not drawn back to it later.
- You can verify it. The claim is testable by you, with the tests above, without taking anyone's word for it.
The first is the easy one to satisfy and the only one most products are actually claiming. The second is where the trouble lives.
Where Agimat FX stands
The MetaTrader 5 rebuild is non-repaint in the strict sense: the arrow prints at the close of the bar and stays where it printed. No revision of closed bars, no drawing back to a prettier place.
Do not take that on trust either. When it is released, run the forward-walk test on it — write down the time you see each arrow appear, and check it against where the arrow sits. That is the test I would want someone to run on my own work, and an indicator worth buying will survive it.
Be told when the new build is ready
One message. Nothing else, ever.
The list hears first.