If you've ever loaded an indicator with a gorgeous history of perfectly-timed arrows, watched it live, and found the real-time signals far less impressive — you've met a repainting indicator. It's the single biggest reason traders lose money on tools that "backtested great."
Here's what repainting actually is, the three things that cause it, and a two-minute test that works on any indicator.
What "repainting" really means
An indicator repaints when its display on closed, historical bars changes after the fact — so the picture you see now is not the picture you would have seen trading in real time. The history gets quietly rewritten to look better than reality, which is exactly why repainting tools flatter their own track record.
The honest standard is simple: a signal printed on a closed candle should be immutable. Once the bar closes, the arrow, label, or level never moves, disappears, or appears late. What you see on history is what you'd have traded live.
One important distinction first, because it trips people up: a band, oscillator, or score that updates while the current candle is still forming is not repainting. Live values are supposed to move as new ticks arrive — that's normal. The problem is only when already-closed bars get revised.
The three things that cause repainting
1. Higher-timeframe data with lookahead
The classic offender. When an indicator pulls higher-timeframe data into a lower-timeframe chart and requests it with lookahead enabled, it shows the finished higher-timeframe value on historical bars that, in real time, hadn't finished yet. The chart effectively "knows the future" on history and can't possibly reproduce it live. Any multi-timeframe indicator should be examined carefully here.
2. Signals built on the unclosed bar
If an indicator fires its signal from the live, still-forming candle's price, that signal can appear, move, and vanish as the candle develops. On historical bars TradingView only stores the final OHLC of closed candles, so the history looks clean and decisive — while live, the same logic flickers. The fix on the indicator's side is to evaluate and confirm only on bar close; the cost is that the signal lands one candle later than the flickering version appeared to.
3. Functions that need future bars to confirm a past point
Tools like ZigZag, pivots, fractals, and some swing detectors need a number of bars to the right before they can confirm a point — then they draw it back on the bar where it occurred. On history that looks prophetic; live, the point only appears after the confirmation bars have passed. The drawing isn't lying about the past, but you could never have acted on it at the marked bar.
How to test any indicator in two minutes
You don't need the source code. Use TradingView's own tools:
- Bar Replay. Open Bar Replay, rewind, and step the chart forward one candle at a time. Watch the signals as each bar closes. If an arrow that printed two bars ago suddenly shifts, disappears, or a new one materializes on an old bar — it repaints. If every past signal stays exactly where it was — it doesn't.
- Reload the chart. Note the most recent signals, then refresh the page. If signals that were there a moment ago vanish or relocate after reload, the indicator was painting from live state it can't reconstruct.
- Watch one live session. Mark where a signal appears in real time and compare it to where it sits on history tomorrow. They should match exactly.
- Check the alert mode. When you set an alert, prefer "Once Per Bar Close" over "Once Per Bar." If a tool only behaves correctly with closed-bar alerts, that tells you where its honesty lives.
If the source is open, scan it for higher-timeframe requests with lookahead, "calculate on every tick" behavior, and pivot/zigzag/fractal logic — the three causes above.
What "confirmed at close" guarantees — and what it costs
A non-repainting indicator evaluates its logic only on confirmed, closed-bar data and never revises a past bar. That gives you a track record you can actually trust, because every historical signal is one you could have taken.
The trade-off is honest and worth stating plainly: you receive the signal one candle after the condition completes, not in the middle of the move. A repainting tool can look faster because it's allowed to cheat on history. A confirmed-at-close tool waits for the bar to finish — and in exchange, what you backtest is what you trade.
This is the standard Forge is built to: signals confirm on candle close and are immutable. It's also why the published stats and the live behavior are the same numbers — there's no hidden gap between the screenshot and the session.
FAQ
Is intrabar updating the same as repainting? No. A value moving while the current candle is still open is normal, as long as it settles deterministically on close from confirmed data. Repainting is when a closed bar's display changes after the fact.
Do non-repainting indicators lag? They confirm one candle later than a repainting version appears to, because they only use closed-bar data. That one-bar wait is the cost of a signal you could actually have traded.
Test it on a real tool
The fastest way to internalize this is to run the Bar Replay test on something built not to repaint. The free TradeScorer indicator bundle is a clean place to start, and the Forge system confirms every signal on candle close. Step it back in replay and watch the signals hold.
Related TradeScorer tool: Forge.
TradeScorer products are technical analysis tools, not investment advice. Trading futures involves substantial risk of loss. Read the full risk disclosure before use.