Articles · Crypto
Why indicators repaint: and how to tell before you trust one
Some indicators quietly rewrite their own history, making their past signals look perfect. Here's what repainting actually is, why it happens, and three tests that expose it in minutes.
Load almost any popular indicator, scroll back in time, and it looks brilliant: every swing nailed, every reversal flagged. Then you trade it forward for two weeks and the magic is gone. Nine times out of ten you have met a repainting indicator, a tool that rewrites its own history.
What repainting actually is
An indicator repaints when the value it shows for a past bar is different from the value it showed while that bar was live. The chart you are admiring is not the chart you would have traded. The historical signals were recalculated after the fact, with information that did not exist at the time.
It is worth being precise, because repainting is not one bug but a family:
- Forming-candle signals. The indicator evaluates the current, still-open candle. The signal appears, disappears and reappears as the price wiggles, and only the final, flattering version is saved into history. On history everything is computed on closed bars, so the plotted past never shows the flicker.
- Higher-timeframe data leakage. In Pine Script, requesting a higher timeframe value the wrong way (request.security without proper offset) delivers the HTF candle's close before that candle has closed. Historical bars get data that live bars will not have.
- Pivot/zigzag offsets. A pivot high is only confirmed N bars after it happens. Indicators that draw the pivot on the pivot bar are placing the label back in time, technically honest geometry, practically a signal you could never have acted on.
Why so many tools ship this way
Rarely malice, usually incentives. A repainting indicator produces stunning screenshots, and screenshots sell. The author often does not realize it either, the default behaviors of charting platforms make repainting the path of least resistance, and detecting it requires deliberately testing forward, which very few people do before publishing.
Three tests that expose it
- Bar replay. Step through history one bar at a time using the platform's replay mode. If signals appear in replay later (or never) compared to the static chart, the indicator repaints. Ten minutes, no code required.
- Alert vs. history diff. Set an alert on the signal condition and let it run for a week. Then compare the alert log against what the chart now claims happened. Every mismatch is a rewrite.
- Screenshot discipline. Screenshot the chart today. Reopen it in a week. If yesterday's arrows moved, you have your answer.
The rule I build by
Everything published here follows one constraint: a signal, once printed on a closed candle, never moves. Signals evaluate on closed bars only, higher-timeframe requests are offset so live and historical bars see identical data, and pivot-based logic waits for confirmation and says so.
The cost is honesty: charts look merely good instead of perfect, entries are a bar later than fantasy would allow, and some pretty setups are ruled out entirely. The benefit is that the backtest, the replay, the alert log and the live chart all tell the same story, which is the only property that makes a tool worth trading.
If an indicator will not survive these three tests, it does not matter how good it looks. You would be trusting a historian who keeps editing the archives.
Want the next one in your inbox?
The newsletter ships new articles + behind-the-scenes notes.