Pine-Script-Import
Eine TradingView Pine-Script-v5-Strategie importieren und auf eigenen Daten testen, mit PSO-Optimierung und Walk-Forward-Validierung, die TradingView nicht bietet.
Verwendung
- Workspace öffnen und eine Strategie öffnen oder erstellen.
- In der Graph-Editor-Toolbar auf Pine Import klicken.
- Pine-Script-v5-Code in das Textfeld einfügen.
- Namen vergeben, dann auf Convert to graph klicken.
- Den umgewandelten Graphen prüfen, dann mit Save & open im Editor öffnen. Alle
input()-Variablen werden automatisch zu tunable Konstanten. - Backtest oder PSO-Optimierung wie gewohnt ausführen.
Was konvertiert wird
| Pine-Script-Konstrukt | Graph-Block |
|---|---|
ta.ema(src, len) | Indicator.EMA |
ta.sma(src, len) | Indicator.SMA |
ta.rsi(src, len) | Indicator.RSI |
ta.atr(len) | Indicator.ATR |
ta.macd(...) | Indicator.MACD |
ta.bb(src, len, mult) | Indicator.BollingerBands |
ta.stoch(k, d, ...) | Indicator.Stochastic |
ta.highest(src, len) | Indicator.Highest |
ta.lowest(src, len) | Indicator.Lowest |
ta.crossover(a, b) | Math.CrossesAbove |
ta.crossunder(a, b) | Math.CrossesBelow |
strategy.entry("Long", strategy.long) | Sink.Entry.Long |
strategy.entry("Short", strategy.short) | Sink.Entry.Short |
strategy.close(...) | Sink.Exit |
input.int / input.float | Source.Constant.Number (tunable) |
input.bool | Source.Constant.Boolean |
and / or / not | Logic.And / Or / Not |
condition ? a : b | Logic.IfThenElse |
>, <, >=, <=, == | Compare.GT / LT / GTE / LTE / EQ |
+, -, *, / | Math.Add / Sub / Mul / Div |
close / open / high / low | Source.Bar.Field |
Einschränkungen: was nicht konvertiert wird
partiqons Graph-System deckt indikatorbasierte Handelslogik ab. Für manche Pine-Script-Funktionen gibt es keine Entsprechung:
- Pine Script v4: nur v5 wird unterstützt. TradingViews eingebauten Pine-Konverter zum Upgrade auf v5 nutzen.
request.security(): Multi-Timeframe-Datenabruf. Stattdessen partiqons Aggregator-Blöcke (M15, M30, H1, D1) verwenden.- Komplexe benutzerdefinierte Funktionen: einfache Hilfsfunktionen werden oft inliniert; tief verschachtelte Funktionen können fehlerhafte Ergebnisse liefern.
- Arrays und Matrizen: Pine's
array.*undmatrix.*haben kein Block-Äquivalent. - Zeichenfunktionen:
plotshape,label.new,line.newetc. sind reine Visualisierungen und werden ignoriert. alert()/alertcondition(): Alert-Trigger werden nicht übernommen.table.*: Dashboard-Tabellen werden nicht konvertiert.- Reiner Indikator-Code (ohne
strategy.entry()): erzeugt einen Graphen ohne Entry-Knoten. Entry-Logik danach manuell ergänzen.
Beispiel: EMA-Crossover
Eine einfache Pine-Script-v5-Strategie und was nach dem Import daraus wird:
Nach dem Import enthält der Graph: zwei EMA-Blöcke (fastLen und slowLen als tunable Konstanten), einen CrossesAbove-Block, Mul + Sub für den Stop-Abstand, Mul + Add für das Take-Profit und eine Entry-LONG-Senke. Alle vier input.*-Variablen sind als tunable markiert und bereit für die PSO-Optimierung.
Tipps für beste Ergebnisse
strategy.entry()mit expliziten Stop- und Take-Profit-Parametern verwenden. Der Konverter überträgt diese direkt auf die Eingängestop_loss_distanceundtake_profit_distancedes Entry-Blocks.- Tief verschachtelte if/else-Blöcke vermeiden. Bedingungen mit
and/orflachhalten. input()-Variablen aussagekräftig benennen, denn die Namen werden zu Node-Labels im Graphen.- Wenn der umgewandelte Graph nicht gültig ist, wird nichts gespeichert und das Panel zeigt den Grund. Das Skript vereinfachen (siehe Einschränkungen oben) und erneut umwandeln.
Einen Graphen nach Pine Script exportieren
Der Button Pine Export in der Werkzeugleiste macht aus der geöffneten Strategie eine TradingView-Strategie in Pine Script v5. Das Skript ist so geschrieben, dass es handelt wie der Backtest von partiqon mit demselben Graphen:
- Ein Entry, der am Schluss eines Bars signalisiert wird, wird zur Eröffnung des nächsten Bars ausgeführt; Stop- und Target-Abstand werden vom tatsächlichen Einstiegskurs gemessen. Stop und Target gelten ab dem Einstieg, auch für den Rest des Bars, in dem er ausgeführt wird.
- Beim Standard „eine Position gleichzeitig“ steigt das Skript nur ohne offene Position ein, höchstens einmal pro Bar. Mit höheren Positionslimits kauft es je Richtung bis zum Limit nach. TradingView kann nicht gleichzeitig LONG und SHORT halten; eine Strategie mit Hedging wird deshalb nicht exakt nachgebildet. Das steht oben in der Datei.
- Exit-Blöcke schließen zum Schlusskurs der Signal-Bar, je Seite, und bei gesetztem Anteil nur teilweise. Stop-Updates ziehen den Stop nur nach.
- Blöcke hinter einem Aggregator werden auf den Bars dieses Zeitrahmens berechnet und auf historischen Bars im Chart gelesen, sobald der höhere Bar abgeschlossen ist, wie in partiqon. Wende das Skript auf einen Chart mit dem Zeitrahmen an, der oben in der Datei steht.
- Indikatoren verwenden die Definitionen von partiqon, wo die eingebauten von TradingView abweichen (zum Beispiel beim Start eines EMA).
Was das Skript nicht nachbilden kann, steht oben in der Datei:
- Blöcke ohne Pine-Gegenstück (zum Beispiel die Regime- und Volatilitäts-Gates) werden dort genannt. Gates gelten im Skript als immer offen; es kann also öfter handeln als partiqon.
- Spread, Slippage und Kommission werden nicht berechnet. Stelle sie in TradingView in den Eigenschaften der Strategie ein. partiqon wendet Slippage auf Einstiege und Stops an, nicht auf Ziele: ein Ziel ist eine ruhende Limit-Order und zahlt nur den Spread. Die Slippage-Einstellung von TradingView gilt ebenfalls für Market- und Stop-Orders, nicht für Limit-Orders.
- Berührt ein Bar Stop und Target, nachdem er zwischen beiden eröffnet hat, bucht partiqon den Stop; TradingView entscheidet den Ausführungskurs nach eigenen Regeln, die beiden können sich bei einem solchen Bar also unterscheiden.
- Auf Live-Bars zeigt TradingView einen Bar des höheren Zeitrahmens schon, während er sich noch bildet (das Skript liest ihn mit
request.securityund ausgeschaltetem Lookahead), und sein Wert ändert sich, bis der Bar schließt. partiqon liest nur abgeschlossene Bars; ein Live-Signal kann daher vom Backtest abweichen, bis dieser Bar geschlossen ist. Oben in der Datei steht das, sobald das Skript einen höheren Zeitrahmen verwendet. - Die Kursdaten von TradingView stammen aus einer anderen Quelle als dein Datensatz; einzelne Bars und Trades können abweichen.
Konnten Blöcke nicht übersetzt werden, sagt partiqon das direkt nach dem Export.