Little Bird Trading

Pine Script FAQ: Backtests und Alerts

4 Min. Lesezeit · Aktualisiert

Das ist eine FAQ in einfacher Sprache zu den zwei Pine-Fragen, über die fast jeder auf TradingView stolpert: warum der Backtest einer Strategie besser aussieht, als sich der Live-Handel anfühlt und warum ein Alarm manchmal zu einem anderen Moment oder Preis auslöst, als du erwartet hast. Beides hat dieselbe Ursache: eine Lücke zwischen den Daten, die bei einer Entscheidung tatsächlich verfügbar waren, und dem, was deine Augen sehen, nachdem die Kerzen geschlossen haben.

Was ist der Unterschied zwischen einem Indikator, einer Strategie und einem Alarm?

Ein Indikator (indicator()) zeichnet und rechnet nur, er plottet Linien, Farben und Beschriftungen. Eine Strategie (strategy()) simuliert Orders: Sie ruft strategy.entry/strategy.exit auf, führt sie gegen historische Kerzen aus und erzeugt den Strategy-Tester-Bericht mit Nettogewinn, Drawdown und Trefferquote. Ein Alarm ist eine eigene Benachrichtigungsebene, die TradingView auslöst, wenn eine Bedingung wahr ist; er handelt selbst nichts. Verwirrung entsteht, wenn man einen Backtest als Versprechen liest oder einen Alarm für eine Ausführung hält: Das sind drei verschiedene Aufgaben. Die genauere Trennung findest du im Leitfaden Indikator oder Strategie.

Warum sieht mein Backtest großartig aus, aber die Live-Ergebnisse passen nicht dazu?

Vier Dinge blähen einen Backtest gegenüber der Realität auf, und alle lassen sich beheben:

  • Annahmen zu Kerzenschluss und Intrabar. Standardmäßig wertet der Strategy Tester die Logik zum Kerzenschluss aus. Nutzt deine Bedingung Hoch/Tief oder close der aktuellen Kerze so, dass sie erst nach Abschluss der Kerze bekannt wären, verwendet die historische Ausführung Informationen, die der Live-Trade nicht haben konnte.
  • Standardausführungen zu unrealistischen Preisen. Eine Market-Order im Tester wird zur Eröffnung der nächsten Kerze ausgeführt; bei einer schnellen Eröffnung kann dieser Preis live mehrere Ticks oder Punkte entfernt liegen.
  • Keine Kommission oder Slippage modelliert. Lässt du commission_value und slippage in strategy() auf null, ist jeder simulierte Trade reibungsfrei. Setz realistische Werte ein; schon ein Bruchteil eines Ticks Slippage macht viele „profitable“ Scalping-Systeme negativ. (Die Kommission stellst du über commission_type und commission_value ein.)
  • Winzige Stichproben. Zwölf Trades, die alle funktioniert haben, sind zu wenig, um von einem Vorteil zu sprechen. Lies So erkennst du überangepasste Handelssysteme, bevor du irgendeiner Kurve vertraust.

Rechenbeispiel: Ein System mit +4200 $ über 40 ES-Trades ohne Kosten sieht ganz anders aus, sobald du eine Round-Turn-Kommission von 2,50 $ und einen Tick Slippage auf jeder Seite hinzufügst, beim Einstieg und beim Ausstieg. Ein Tick bei ES entspricht 0.25 Punkten = 12,50 $, zwei Ticks also 25,00 $; plus 2,50 $ Kommission ergibt 27,50 $ Reibung pro Trade. Über 40 Trades sind das etwa 1100 $, und aus den glänzenden +4200 $ werden ungefähr +3100 $, noch weniger, wenn sich Einstiege auf volatile Eröffnungen häufen, bei denen die echte Slippage größer als ein Tick ist.

Was ist Repainting, und heißt es, dass das Skript kaputt ist?

Nicht unbedingt. „Repainting“ ist ein Sammelbegriff dafür, dass ein Skript auf historischen Kerzen andere Werte zeigt, als es in Echtzeit erzeugt hat. Der ehrliche Test ist einfach: Hätte die Entscheidung live, im selben Moment, mit denselben Informationen getroffen werden können? Ein Signal, das erst nach Kerzenschluss bestätigt, macht seinen Job: Es wartet auf den Schluss, bevor es bestätigt. Ärger machen Skripte, die ein Signal auf der sich bildenden Kerze plotten und es verschieben, sobald die Kerze fertig ist, oder die Daten eines höheren Zeitrahmens mit aktiviertem Lookahead abrufen. Wenn du ein Signal willst, nach dem du handeln kannst, werte es mit barstate.isconfirmed (Kerzenschluss) aus; das reagiert nur auf die abgeschlossene Kerze.

Warum hat mein Alarm zu spät, zu einem anderen Preis oder doppelt ausgelöst?

  • „Once Per Bar Close“ gegenüber „Once Per Bar“. Ein Alarm, der auf der sich bildenden Kerze auslösen soll, kann in dem Moment feuern, in dem eine Bedingung intrabar kurz wahr wird; dann schließt die Kerze woanders und es sieht „falsch“ aus. Das Auslösen zum Kerzenschluss kommt später, trifft aber genau den Moment, in dem eine bestätigte Strategie tatsächlich entscheidet (die Strategie handelt dann zur Eröffnung der nächsten Kerze).
  • Der Alarmpreis ist eine Momentaufnahme zum Zeitpunkt der Auslösung. Dein Broker führt dich zum Live-Marktpreis aus, der sich in den Millisekunden zwischen Alarm und Order bewegt.
  • Doppelte Auslösungen bedeuten meist, dass die Bedingung über mehrere Ticks wahr blieb und der Alarm auf jeden Tick eingestellt war, obwohl er einmal pro Kerze auslösen sollte.

Wie hängt das mit der Methode der Handelspläne zusammen?

Die Handelspläne umgehen die ganze Frage „Hat mein Signal repaintet?“, weil sie dir feste, vorab geplante Levels geben. Die täglichen Levels, vor der Eröffnung auf ES, SPY, NQ und QQQ eingezeichnet, werden nach dem vorherigen Handelsschluss berechnet und verschieben sich während der Handelssitzung nicht, also gibt es nichts, was repainten könnte: Jedes Level steht vor 9:30 Uhr ET fest und bleibt, wo es ist. MyLinedChart zeichnet diese Levels nur ein; es simuliert nie Orders und enthält daher keine der oben genannten Annahmen zu Backtest-Ausführungen. Widerspricht ein veröffentlichtes Level deinem eigenen Alarm oder deiner Strategie, nimm das als Information, und oft lautet die Antwort: warten. Die Begriffe findest du im Glossar zu den Handelsplänen.

Praktische Checkliste, bevor du einem Pine-Ergebnis vertraust

  • Werte die Logik mit barstate.isconfirmed aus, damit Backtest und Live-Handel denselben Entscheidungsmoment haben.
  • Setz realistische Kommission und Slippage, commission_type, commission_value und slippage in strategy(), für das Instrument, das du tatsächlich handelst.
  • Wähl die Alarmhäufigkeit bewusst: Kerzenschluss für Bestätigung, einmal pro Kerze gegen Doppelauslösungen.
  • Beurteile Ergebnisse erst bei genug Trades, damit sie etwas aussagen.
  • Halte Kontext-Einblendungen (wie veröffentlichte Levels) getrennt von der Befugnis zur Ausführung: Der Chart liefert die Informationen für die Entscheidung, deine schriftlichen Regeln treffen sie.

Weiterlesen

Quellen

Nur zu Bildungszwecken. Keine Anlageberatung.

Nur zu Bildungszwecken. Keine Anlageberatung.