How I Proved My Indicator Does Not Repaint

17 July 2026, 10:04
Brahim Ben Abla
0
31

Open any signal indicator page on the Market and you will read the same three words: "non-repainting, non-redrawing, non-lagging". They cost nothing to write. Nobody shows you a measurement.

So when I built a signal indicator for my own tool family, I decided the claim was worthless unless I could produce a number. Here is how I did it - and the method works for any indicator, including yours.

What repainting actually is

An indicator repaints when a value it already showed changes later. The arrow you saw at 10:05 quietly moves, disappears, or appears on a bar where it never was during live trading. Backtests then look brilliant, live results do not match, and the buyer blames themselves.

Two mechanisms cause most of it:

  • Calculating on the forming bar (bar 0). The current bar keeps changing until it closes. Any condition based on it is a moving target.
  • The multi-timeframe trap. You read a higher-timeframe value on an M5 chart - for example the H1 EMA trend. If you read the current H1 bar, you are reading a bar that has not finished yet. On history it looks like the indicator knew the H1 outcome in advance. Live, it does not.

The design rules I used

  • Every signal is evaluated only on closed bars. Bar 0 is never touched.
  • Each buffer value is written exactly once and never modified afterwards.
  • Higher-timeframe values are taken from the last already-closed HTF bar, addressed by time, not by index.
  • One decision that cost me a filter: my original strategy used a spread filter. Historical spread cannot be reconstructed in the tester, so a spread-dependent signal would behave differently on history than live. I removed it from the signal condition and display the current spread as a warning instead. Determinism beats one extra filter.

The measurement

Design rules are promises. I wanted evidence, so I wrote a small test EA that runs alongside the indicator in the Strategy Tester:

  • On every tick, it reads every indicator buffer for every available bar.
  • The first value it ever sees for a given bar is frozen in memory.
  • Every later read is compared against that frozen value. Any difference is logged as a MISMATCH.
  • At the end, a full sweep re-reads the entire history one more time and compares everything again.

If the indicator repaints even once - a single arrow that moved, a single level recalculated - the counter cannot stay at zero.

The result

Three months of XAUUSD M5, 1-minute OHLC modelling, 100% history quality:

17,806 bars recorded | 28,330,400 re-checks | 0 mismatches (rolling) | 0 mismatches (final sweep)
NO REPAINTING DETECTED: every first-seen value was identical on every later read.

Why I am posting this

Not because the number is impressive - it is exactly what a correctly built indicator must produce. The point is that it is checkable. Anyone can build this test EA in an afternoon and run it against any indicator they own, including mine, including the ones they bought.

If you sell indicators: measure it and publish the number. If you buy them: ask the seller for it. "Non-repainting" is not a feature, it is a claim - and claims should come with evidence.