Skip to content
Language

Structure & Liquidity

How to Verify a TradingView Indicator Doesn’t Repaint

Every indicator vendor claims “no repaint” somewhere in their marketing. Almost none of them show you how to check it yourself. This article does — using a method built into TradingView itself, and a standard borrowed directly from TradingView’s own Pine Script documentation.

One thing up front: this isn’t a “repaint bad, us good” pitch. It’s the opposite. The honest technical answer is that most indicators repaint in some form — including extremely common ones you’ve probably never questioned. The real question isn’t whether an indicator repaints. It’s whether it repaints in a way that changes the signal after the fact.

Table of contents

  • What “repaint” actually means, technically
  • The claim almost nobody makes: repainting is usually normal
  • Step-by-step: the Bar Replay test
  • Legitimate repainting vs. a genuine flaw
  • A checklist you can run on anything

What “repaint” actually means, technically

In Pine Script, every bar has two states: developing (the current, unconfirmed bar, still forming) and confirmed (closed — its final values are locked in). A script can reference either state. If it plots or signals off the developing bar’s live values, that plot can and will change until the bar closes. If it waits for barstate.isconfirmed — or more simply, references the prior bar’s confirmed close rather than the live one — the resulting plot doesn’t move once it’s drawn.

“Repainting,” in the strict technical sense, is when a script’s historical output doesn’t match what it actually displayed in real time as those bars were forming. A signal that shows up at 2:34pm live, then — after the bar closes — turns out to have “always” been three bars earlier when you reload the chart, is repainting.

The claim almost nobody makes: repainting is usually normal

Here’s what TradingView’s own Pine Script documentation says, directly, in its section on repainting: it states that this behavior is defined as “script behavior causing historical vs realtime calculations or plots to behave differently,” and — this is the part worth sitting with — TradingView’s own estimate is that more than 95% of indicators in existence exhibit some form of repainting behavior. The documentation gives MACD and RSI as examples: both show confirmed, final values on historical (closed) bars, but both fluctuate on the current, unconfirmed bar until it closes.

Read that again: MACD and RSI — arguably the two most widely used indicators on the platform — repaint on the live bar in the ordinary sense of the word. Nobody calls them broken for it, because everyone understands the live bar is still forming.

TradingView’s documentation makes the nuance explicit with a pointed example: “Who would think of discrediting a volume profile indicator solely because it updates its values on realtime bars?” A volume profile has to update as new volume prints within the current bar. That’s not a flaw. That’s the tool doing its job.

This reframes the whole question. “Does it repaint?” is close to the wrong thing to ask, because the honest answer for almost everything is “somewhat, on the current bar, yes.” The useful question is: does it repaint in a way that changes the signal after the fact — after the bar that generated it has closed?

Step-by-step: the Bar Replay test

You can run this on any indicator, on any chart, in a few minutes, using TradingView’s built-in Bar Replay tool.

1. Load the chart with the indicator on it, and open Bar Replay. Set the starting point somewhere well back in history — far enough that you’ll see a reasonable number of signals play out.

2. Step forward bar by bar and watch the indicator live. As you advance through replay, note the exact bar where any signal, plot, or level first appears. During replay, barstate.isconfirmed is false for the bar currently being formed — you are, in effect, watching the indicator behave exactly as it would have live, in real time, without hindsight.

[Screenshot: SS-REPAINT-01 — Bar Replay in progress, signal appearing on the developing bar]

3. Let replay finish, or exit it, and look at the same stretch of chart as ordinary history. Now every bar in that range is confirmed — replay is over, and you’re looking at the finished, closed record.

4. Compare. Does the signal you saw appear on the same bar, in the same place, that you noted during replay? If yes — the signal was stable once its bar closed, and what you saw live matches what history now shows. If the signal has moved to a different bar, appeared where it wasn’t before, or vanished — that’s repainting, in the sense that actually matters.

[Screenshot: SS-REPAINT-02 — side-by-side comparison of replay-time signal position vs. final historical position]

5. Cross-check with alerts, if you can. Set an alert on the signal using “Once Per Bar Close” (not “Once Per Bar”), let it run for a stretch, then compare the alert log against the finished chart after a reload. A signal that generated a bar-close alert should be sitting in the same spot on the chart afterward. If it isn’t, that’s the same problem showing up a different way.

Legitimate repainting vs. a genuine flaw

Not everything that moves on the current bar is a problem. A few categories are legitimately, unavoidably going to behave this way:

  • Pivot-based drawings. A pivot high or low, by definition, can’t be confirmed until enough bars have passed on both sides of it. It will appear to “shift” as new bars form and get reassessed — because it genuinely can’t be known earlier. This isn’t the indicator lying to you; it’s the nature of what a pivot is.
  • Higher-timeframe developing candles. If a script pulls in a 4H or daily value on a lower-timeframe chart, that higher-timeframe candle is, itself, still forming until it closes — exactly the same live/confirmed distinction, one level up.
  • Continuously-updating context tools. Volume profiles, running VWAPs, and similar tools are supposed to update as the current bar prints new data. That’s the feature working, not failing.

The genuine flaw category is narrower and more specific: a signal or level that appeared at one point in time, and then, after the fact — once the bar that produced it has closed — moves, disappears, or gets replaced with something that looks better in hindsight. That’s the behavior that actually damages trust, because it means what you saw live and what the chart shows in review are two different histories. It’s also, not coincidentally, the mechanism behind fabricated-looking backtests: a script that quietly deletes or relocates its losing signals after the fact will always look better than it performed.

A checklist you can run on anything

You don’t need to trust anyone’s marketing claim to check this. Run this on any indicator — including ones you’re currently paying for:

  1. Does the vendor’s documentation state, specifically, which elements confirm on bar close and which are developing/live values? (Vague “no repaint” claims with no specifics are a yellow flag, not proof of anything either way.)
  2. Run the Bar Replay test above. Does the signal’s position match between replay-time and the final historical chart?
  3. Set a “Once Per Bar Close” alert and compare it against the chart after a reload.
  4. If it’s a strategy rather than an indicator, check whether enabling TradingView’s Bar Magnifier setting changes the backtest results significantly — if it does, the strategy’s performance may depend on intra-bar data it wouldn’t actually have access to live.
  5. Ask what happens to a “wrong” signal after the fact. Does it stay on the chart, clearly marked, or does it quietly disappear?

None of this requires taking anyone’s word for it. That’s the point.


Related SSM IQ Tools: SSM IQ ICT · SSM IQ Market Structure Liquidity Related Articles: What Research Actually Says About Stop Hunts Source: TradingView Pine Script Documentation, “Repainting”

SSM IQ tools are analytical software, not investment advice. Trading involves substantial risk. Author: SSM IQ Research · We Are Tech Sp. z o.o. · Updated: 2026-08-16

Charts

Chart pending
Bar Replay lets you watch a signal appear in real time, exactly as it would have looked live.
Chart pending
Compare the two. If the signal moved, that bar repainted.