Repainting bei Indikatoren: erkennen, testen, vermeiden.

Repainting heißt: Ein Indikator zeigt auf vergangenen Kerzen andere Werte oder Signale, als er in Echtzeit an derselben Stelle gezeigt hätte. Ob ein Indikator umzeichnet, prüfen Sie am zuverlässigsten mit einem Replay-Test, der jeden Wert nur aus den bis dahin bekannten Daten berechnet und mit dem fertigen Chart vergleicht. Das Problem ist verbreitet: TradingView schätzt in seiner Pine-Script-Dokumentation, dass über 95 % der vorhandenen Indikatoren in irgendeiner Form umzeichnen. Nicht jede Form ist schädlich. Kritisch wird es, wenn ein Backtest Signale verwendet, die es live nie gegeben hätte. Dieser Artikel ordnet die Arten von Repainting ein, nennt typische Verdächtige auf TradingView und in MetaTrader 5, zeigt einen Replay-Test in Python und beschreibt Regeln, mit denen ein automatisiertes System nur auf Werten entscheidet, die sich nicht mehr ändern.

Was bedeutet Repainting bei Indikatoren?

Ein Chart enthält zwei Arten von Kerzen: abgeschlossene historische Kerzen und die laufende Kerze ganz rechts. In TradingView läuft ein Skript auf historischen Kerzen genau einmal pro Kerze mit den Schlusswerten. Auf der laufenden Kerze rechnet es bei jeder neuen Kursänderung erneut und setzt vor jeder Neuberechnung seine Variablen auf den Stand der vorherigen Kerze zurück. Gespeichert wird erst der letzte Durchlauf beim Schluss der Kerze. Lädt der Chart neu, werden aus den bisherigen Echtzeit-Kerzen historische Kerzen, die nur noch die Endwerte kennen.

Aus diesem Ablauf entsteht Repainting: Was ein Indikator während der Kerze anzeigte, muss nicht das sein, was später im Chart steht. TradingView definiert Repainting deshalb allgemein als Verhalten, bei dem historische und Echtzeit-Berechnung unterschiedlich ausfallen. Die Dokumentation rät ausdrücklich davon ab, nur pauschal zu fragen, ob ein Skript umzeichnet. Sinnvoller ist die Frage, welche Werte sich wann ändern können.

Für regelbasiertes Trading zählt vor allem ein Punkt: Ein Backtest arbeitet fast immer auf historischen Daten. Zeichnet ein Indikator um, prüft der Backtest also die schöne nachträgliche Fassung der Signale. Das ist eine Form des Look-Ahead-Bias, eine der klassischen Verzerrungen im Backtest. Wie Repainting beim Übertragen einer Strategie auf eine andere Plattform auffällt, zeigt der Artikel über das Umwandeln von Pine Script nach MQL5.

Welche Arten von Repainting gibt es?

Die TradingView-Dokumentation sortiert die Ursachen in vier Gruppen: verbreitet und oft akzeptabel, potenziell irreführend, inakzeptabel und unvermeidbar. Für ein automatisiertes System lohnt sich eine Sortierung nach der Frage, was im Backtest schiefgeht.

ArtTypisches BeispielFolge im Backtest
Zukunftsdaten in der Vergangenheitzentrierter gleitender Durchschnitt, Nullphasen-Filter, höhere Zeitebene ohne VersatzSignale nutzen Kurse, die zum Zeitpunkt noch unbekannt waren; Ergebnisse sind wertlos
Nachträglich bestätigte PunkteZigZag, Pivots, Fraktale, die am Extrem eingezeichnet werdenWendepunkte erscheinen pünktlich, live wären sie erst Kerzen später bekannt gewesen
Werte der laufenden KerzeKreuzung von Durchschnitten, RSI über einer Schwelle während der KerzeLive entstehen Signale, die bis zum Schluss wieder verschwinden; im Backtest fehlen sie
Nur in Echtzeit berechenbare WerteVariablen, die Zustände innerhalb einer Kerze speichern, Berechnung auf jedem TickHistorisch nicht reproduzierbar, also gar nicht sinnvoll testbar
Datenänderungenkorrigierte Kurse, anderer Startpunkt der HistorieKleine Abweichungen, die sich bei pfadabhängigen Indikatoren fortsetzen können

Die erste Zeile ist die gefährlichste, weil sie im Chart unauffällig ist. Eine zentrierte Glättung sieht wie ein besonders sauberer Durchschnitt aus. Sie verwendet aber für jeden Punkt Kurse davor und danach. Dasselbe gilt für Nullphasen-Filter: Die SciPy-Funktion filtfilt filtert ein Signal einmal vorwärts und einmal rückwärts, damit sich die Phasenverschiebung aufhebt. Für Analysen ist das praktisch, als Handelssignal ist es ein Zugriff auf die Zukunft.

Die dritte Zeile ist dagegen oft harmlos, solange klar ist, wann entschieden wird. Auch MACD oder RSI liefern auf der laufenden Kerze andere Werte als nach deren Schluss. Das ist kein Fehler des Indikators, sondern eine Frage der Ausführungsregel.

Typische Verdächtige auf TradingView und in MetaTrader 5.

Einige Indikatoren und Einstellungen sollten Sie immer prüfen, bevor ein System auf ihnen handelt:

In MetaTrader 5 ist der häufigste Fall ein Expert Advisor, der Indikatorpuffer mit Index 0 liest, also den Wert der laufenden Kerze. Ein zweiter Fall steckt in eigenen Indikatoren: OnCalculate erhält über prev_calculated, wie viele Kerzen beim letzten Aufruf schon verarbeitet waren. Ändert sich die Historie, etwa weil das Terminal ältere Daten nachlädt oder Lücken füllt, setzt das Terminal den Wert auf null, und der Indikator rechnet alles neu. Liefert die vollständige Neuberechnung andere Werte als die schrittweise Fortschreibung, zeichnet der Indikator um, ohne dass im Code ein offensichtlicher Zukunftszugriff steht.

Wie erkennen Sie Repainting mit einem Replay-Test?

Ein Blick auf den Chart reicht nicht, denn der fertige Chart zeigt nur die Endfassung. Der Nachweis gelingt, wenn Sie den Indikator so berechnen, wie er live entstanden wäre: Kerze für Kerze, jeweils nur mit der bis dahin bekannten Historie. Diesen Wert vergleichen Sie mit dem Wert, den die Berechnung auf allen Daten an derselben Stelle liefert. Weichen beide ab, zeichnet der Indikator um.

Das folgende Python-Beispiel prüft zwei Indikatoren auf Zufallsdaten: einen exponentiellen Durchschnitt, der nur vergangene Kurse verwendet, und einen zentrierten einfachen Durchschnitt über 21 Kerzen.

import numpy as np
import pandas as pd

def ema(close, n=20):
    return close.ewm(span=n, adjust=False).mean()

def zentrierter_sma(close, n=21):
    # nutzt je 10 Kerzen davor und danach: Zukunftsdaten
    return close.rolling(n, center=True).mean()

def replay_test(indikator, close, start=100, tol=1e-9):
    """Rechnet den Indikator Kerze für Kerze nur mit der bis dahin
    bekannten Historie und vergleicht mit der Berechnung auf allen Daten."""
    voll = indikator(close)
    abweichungen = []
    for i in range(start, len(close)):
        live = indikator(close.iloc[: i + 1]).iloc[-1]   # Wert, den man live gesehen hätte
        spaeter = voll.iloc[i]                           # Wert im fertigen Chart
        if np.isnan(live) != np.isnan(spaeter) or abs(live - spaeter) > tol:
            abweichungen.append((close.index[i], live, spaeter))
    return abweichungen

rng = np.random.default_rng(7)
close = pd.Series(100 + rng.normal(0, 1, 600).cumsum())

for name, f in [("EMA(20)", ema), ("zentrierter SMA(21)", zentrierter_sma)]:
    abw = replay_test(f, close)
    print(f"{name}: {len(abw)} von {len(close) - 100} Kerzen weichen ab")

Rechenbeispiel mit diesen Zufallsdaten: Der exponentielle Durchschnitt weicht an keiner der 500 geprüften Kerzen ab. Der zentrierte Durchschnitt weicht an 490 Kerzen ab. Live liefert er an der aktuellen Kerze gar keinen Wert, weil die zehn folgenden Kerzen fehlen, im fertigen Chart steht dort aber einer. Nur die letzten zehn Kerzen stimmen überein, weil der Wert dort auch im fertigen Chart fehlt.

Für Ihre eigenen Indikatoren tauschen Sie die Funktion aus. Wichtig ist, dass die Funktion wirklich nur die übergebene Historie sieht und keine globalen Daten liest. Bei Indikatoren mit Schwellen oder Zuständen lohnt es sich, neben den Werten auch die Signale zu vergleichen, denn kleine Wertabweichungen können ein Signal um eine Kerze verschieben. Der Test ist bewusst langsam, weil er für jede Kerze neu rechnet. Für eine Prüfung vor dem Einsatz reicht das; im laufenden Betrieb übernimmt das Signal-Log diese Aufgabe.

In TradingView ist der Bar-Replay-Modus ein grober Ersatz: Sie spielen die Historie Kerze für Kerze ab und notieren, wo Signale erscheinen. Das ist mühsam und ersetzt keine Aufzeichnung unter echten Bedingungen. Belastbarer ist eine echte Aufzeichnung: Indikatorwerte und Signale werden in Echtzeit mit Zeitstempel protokolliert und nach einigen Tagen mit dem neu geladenen Chart verglichen.

Wie vermeiden Sie Repainting im eigenen System?

Die wirksamste Regel ist einfach: Entscheidungen fallen nur auf geschlossenen Kerzen. Historische Kerzen sind immer abgeschlossen. Wenn das System auch live nur abgeschlossene Kerzen auswertet, sehen Backtest und Echtzeit dieselben Werte. Der Preis dafür ist eine Kerze Verzögerung gegenüber einem Signal, das schon während der Kerze erscheint.

In Pine Script beschränkt barstate.isconfirmed eine Bedingung auf das letzte Update der Kerze:

//@version=6
indicator("Signal nur auf geschlossener Kerze", overlay = true)
schnell = ta.ema(close, 20)
langsam = ta.ema(close, 50)
signal  = ta.crossover(schnell, langsam) and barstate.isconfirmed
plotshape(signal, style = shape.triangleup, location = location.belowbar)

In MetaTrader 5 entspricht dem ein Expert Advisor, der einmal je neuer Kerze entscheidet und Puffer erst ab Index 1 liest:

// handle wird in OnInit() angelegt, z. B. handle = iMA(_Symbol, _Period, 50, 0, MODE_EMA, PRICE_CLOSE);
int      handle;
datetime letzteKerze = 0;

void OnTick()
{
   datetime t = iTime(_Symbol, _Period, 0);
   if(t == letzteKerze) return;          // nur einmal je neuer Kerze entscheiden
   letzteKerze = t;

   double wert[];
   ArraySetAsSeries(wert, true);
   if(CopyBuffer(handle, 0, 1, 2, wert) < 2) return;   // ab Index 1: nur geschlossene Kerzen
   // wert[0] = zuletzt geschlossene Kerze, wert[1] = die davor
   // ... Signal aus wert[0] und wert[1] bilden, Entscheidung protokollieren
}

Ergänzend gelten diese Regeln:

  1. Höhere Zeitebenen nur mit bestätigten Werten abfragen: in Pine Script laut Dokumentation mit dem Versatz [1] zusammen mit lookahead_on, in MQL5 über die zuletzt abgeschlossene Kerze der höheren Zeitebene.
  2. Pivots, ZigZag-Punkte und Fraktale auf der Kerze verarbeiten, auf der sie bestätigt sind, nicht auf der Kerze des Extrems.
  3. Keine zentrierte Glättung, keine Nullphasen-Filter und keine Normierung über die gesamte Historie in Signalen verwenden; Kennzahlen wie Mittelwert oder Schwankung nur aus vergangenen Fenstern bilden.
  4. Strategien auf Standard-Kerzen testen. Heikin-Ashi- oder Renko-Werte dürfen höchstens als Indikator-Eingabe dienen, Einstieg und Ausstieg werden auf echten Preisen gerechnet.
  5. Den Testmodus zur Ausführungsregel passend wählen. Der MT5-Strategietester ruft OnTick im Modus „Nur Eröffnungspreise“ nur zu Beginn jeder Kerze auf; das passt zu Systemen, die ausschließlich bei Kerzeneröffnung handeln, und verfälscht Systeme mit Stops, Zielen oder schwebenden Orders.

Zur Absicherung gehört ein Signal-Log: Bei jeder Entscheidung schreibt das System Zeitstempel, Kerzenzeit, die verwendeten Indikatorwerte und das Signal in eine Datei oder Datenbank. Ein späterer Abgleich zeigt dann automatisch, ob die protokollierten Werte noch mit der neu berechneten Historie übereinstimmen.

Grenzen und Risiken.

Ein bestandener Replay-Test belegt nur, dass der Indikator auf den geprüften Daten nicht umzeichnet. Er sagt nichts darüber, ob eine Strategie mit diesem Indikator Gewinne erzielt. Auch ein sauber berechnetes System kann über lange Phasen verlieren, und Handel mit Hebel kann zu Verlusten bis zum Totalverlust des eingesetzten Kapitals führen.

Weitere Grenzen sollten Sie kennen:

Was Sie jetzt konkret tun können.

  1. Listen Sie alle Indikatoren Ihres Systems auf und markieren Sie die Verdächtigen: Pivots, ZigZag, Fraktale, Glättungen, Abfragen höherer Zeitebenen, Nicht-Standard-Charts.
  2. Prüfen Sie im Code, ob Entscheidungen auf der laufenden Kerze fallen, also mit Index 0 in MQL5 oder ohne barstate.isconfirmed in Pine Script.
  3. Führen Sie für jeden eigenen oder unbekannten Indikator einen Replay-Test durch und vergleichen Sie Werte und Signale.
  4. Stellen Sie die Ausführung auf geschlossene Kerzen um und wiederholen Sie den Backtest. Der Unterschied zwischen alter und neuer Kurve zeigt, wie stark das bisherige Ergebnis vom Repainting abhing.
  5. Bauen Sie ein Signal-Log ein und gleichen Sie es nach den ersten Tagen im Demo-Konto mit der neu geladenen Historie ab, bevor echtes Geld im Spiel ist.

Wenn Sie ein bestehendes Regelwerk in einen Expert Advisor oder ein Python-System überführen wollen, gehören Replay-Test und Signal-Log von Anfang an in den Testaufbau. Wie eine solche Umsetzung abläuft, beschreibt die Seite zur Trading-Automatisierung.

Häufige Fragen.

Was ist ein Repainting-Indikator?

Ein Repainting-Indikator zeigt auf vergangenen Kerzen andere Werte oder Signale, als er in Echtzeit an derselben Stelle gezeigt hätte. Ursachen sind Werte der laufenden Kerze, die sich bis zum Kerzenschluss ändern, nachträglich bestätigte Wendepunkte, Zukunftsdaten durch zentrierte Glättung oder falsch abgefragte höhere Zeitebenen. Ein Backtest auf dem fertigen Chart misst dann Signale, die es live so nicht gegeben hätte.

Zeichnen RSI und MACD um?

Auf der laufenden Kerze ändern sich RSI und MACD mit jedem Kurs, nach Schluss der Kerze bleiben ihre Werte stehen. Sie verwenden keine Zukunftsdaten. Ein System mit diesen Indikatoren zeichnet deshalb nicht um, wenn es nur auf geschlossenen Kerzen entscheidet. Entscheidet es während der Kerze, können live Signale entstehen, die bis zum Kerzenschluss verschwinden und im Backtest fehlen.

Wie teste ich, ob ein Indikator umzeichnet?

Am zuverlässigsten mit einem Replay-Test: Der Indikator wird Kerze für Kerze nur mit der bis dahin bekannten Historie berechnet, und jeder Wert wird mit der Berechnung auf allen Daten verglichen. Jede Abweichung ist ein Hinweis auf Repainting. Im Live-Betrieb ergänzt ein Signal-Log mit Zeitstempel und Indikatorwerten den Test, das später mit dem neu geladenen Chart abgeglichen wird.

Ist der ZigZag-Indikator für automatisches Trading geeignet?

Nur mit Einschränkung. Der ZigZag bestätigt einen Wendepunkt erst, wenn sich der Kurs um eine Schwelle davon entfernt hat, zeichnet ihn aber am Extrem ein. Für Analysen von Marktstruktur ist das nützlich. Ein automatisiertes System darf einen Wendepunkt dagegen erst auf der Kerze verwenden, auf der er bestätigt wurde, sonst nutzt der Backtest Wissen, das live noch nicht vorlag.

Quellen und Stand.

Stand: 2. November 2026. Produkte, Funktionen und Preise ändern sich schnell; maßgeblich sind die Angaben der Anbieter und Behörden.

Sie wollen ein Regelwerk ohne Repainting als Expert Advisor oder Python-System umsetzen lassen? Unverbindlich anfragen — wir klären Indikatorlogik, Replay-Test, Signal-Log und den Weg vom Backtest in den Live-Betrieb. Mehr zu meinem Angebot: Trading-Systeme entwickeln lassen.