Downloading...

Pine Script® v6 ist angekommen

Dec 10, 2024

Heute möchten wir gerne die Veröffentlichung unseres Pine Script® v6 bekannt geben! Diese erweiterte Version unserer Programmiersprache umfasst verschiedene Optimierungen, Upgrades und häufig angefragte Features, die nun den Programmierern im Pine Script® eine effizientere und praktischere Arbeit ermöglichen.

In diesem Beitrag werden wir ein paar der wichtigsten Upgrades anführen. Sehen Sie sich unsere Versionshinweise an, wenn Sie mehr über v6 erfahren und über zukünftige Optimierungen auf dem Laufenden bleiben möchten.

v6 Konvertierungstool

Wie in den vorherigen Versionsupdates haben die Upgrades in Pine v6 keine Auswirkungen auf persönliche und veröffentlichte Scripts, die in früheren Pine-Versionen verfasst wurden. Von nun an werden jedoch alle neuen Features ausschließlich in der neuesten Pine-Version implementiert. Aus diesem Grund möchten wir empfehlen, dass Sie Ihre Scripts in v6 konvertieren lassen, damit Sie den Zugang zu den neuen Features erhalten. Die einfachste Methode hierfür ist unser neues Konvertierungstool, welches Sie aktivieren können, indem Sie im Menü „Script verwalten“ die Option „Code in v6 konvertieren“ auswählen.

Hinweis: Nicht alle Scripts können automatisch konvertiert werden. In manchen Fällen werden hierfür manuelle Bearbeitungen notwendig sein, um auf diese Weise sicherstellen zu können, dass die konvertierten Scripts wie erwartet funktionsfähig sind. Wenn Sie Probleme mit der automatischen Konvertierung haben, oder es bevorzugen, Ihre Scripts manuell zu konvertieren, dann sehen Sie sich unsere Migrationsanleitung an.

Dynamische Aufrufe

Bei TradingView haben Sie Zugang zu vielen Tausenden Symbolen für Handelsinstrumente aus überall in der Welt, sowie finanziellen Parametern und Wirtschaftsindikatoren. Die request.*() Funktionsgruppe ermöglicht einem Pine-Script, die Daten für alle verfügbaren Symbole für unterschiedliche Zeitrahmen abzurufen, unabhängig von dem Symbol und Zeitrahmen, welche auf dem Chart verwendet werden.

Diese Funktionen sind vielseitig nützlich. In den früheren Versionen hatten sie jedoch eine erhebliche Begrenzung: Sie benötigten „simple string“ Werte, um das Symbol und den Zeitrahmen für eine Anfrage zu definieren. Hierbei musste der Kontext also auf dem ersten Balken bekannt sein und er konnte später nicht mehr geändert werden. Des Weiteren mussten alle request.*() Aufrufe in dem globalen Rahmen des Scripts ausgeführt werden. Mit anderen Worten gesagt: eine einzelne request.*() Instanz im Code konnte nur Daten für ein Symbol und einen Zeitrahmen abrufen, und keine request.*() Aufrufe konnten innerhalb von Schleifen, Bedingungsstrukturen oder exportierten Bibliotheksfunktionen platziert werden.

In Pine Script® v6 ist es uns nun gelungen, diese Begrenzungen zu entfernen. Nun können Ihre Scripts „series string“ Werte verwenden, um den Kontext eines request.*() Aufrufes zu bestimmen. Zusätzlich können nun request.*() Aufrufe innerhalb von lokalen Schleifen platziert werden. Dank dieser Änderungen können Sie nun Symbole auf einem beliebigen Altbalken berechnen oder modifizieren, ihre Daten dynamisch abrufen, Symbolsammlungen erstellen und ihre Daten innerhalb der Schleifen abrufen, und Vieles mehr, was früher mit den request.*() Funktionen nicht möglich gewesen ist. Wenn Sie mehr erfahren möchten, dann sehen Sie sich den Abschnitt für Dynamische Aufrufe im Benutzerhandbuch an.

Als Beispiel für die Leistungskraft der dynamischen Aufrufe können Sie sich auch die innere Funktionsweise des vorgefertigten Performance-Indikators ansehen. Er spaltet kommaseparierte Listen von Symbol- und Zeitrahmen-Strings in Arrays auf, und ruft dann dynamisch request.security() innerhalb der Schleifen ab, um die Werte für jeden Datensatz abzurufen. In den älteren Versionen hätte ein diesbezügliches Script mehrere input.symbol() und input.timeframe() Aufrufe erfordert, und jede Kombination von Symbol und Zeitrahmen hätte einen separaten request.security() Aufruf im Code benötigt:

Als weitere Referenz können Sie sich auch diese Scripts ansehen, die auf dem TradingView-Konto veröffentlicht wurden. Diese verwenden dynamische Anfragen, um Daten aus anderen Kontexten abzurufen.

  • Forex Heatmap. Dieser Indikator erstellt Ticker-IDs für Kombinationen von Währungspaaren, basierend auf einer benutzerdefinierten Liste von Währungscodes. Hierbei werden die Daten für jede Paarkombination innerhalb der Schleifen dynamisch aufgerufen. Darauffolgend werden die Daten verwendet, um eine farbcodierte Tabelle auszufüllen.
  • Ticker Tape. Dieser Indikator erstellt ein Array von Ticker-IDs aus einer benutzerdefinierten Symbolliste. Es werden hierbei dynamisch Preise und Informationen über die täglichen Veränderungen für jedes Ticker-ID aus dem Array innerhalb der Schleife aufgerufen. Darauffolgend werden diese Daten verwendet, um eine rotierende „Band“-Anzeige zu aktualisieren.
  • LibraryCOT. Vorher enthielt diese Bibliothek nur Tools für die Erstellung von Ticker-IDs für die Anfrage von CFTC Commitment of Traders (COT) Daten, weil diese Bibliotheken keine Funktionen mit request.*() Aufrufen exportieren konnten. Mit den dynamischen Anfragen ist dies nicht mehr der Fall. Die Bibliothek exportiert nun eine requestCommitmentOfTraders() Funktion, welche request.security() intern aufruft, um die COT-Daten direkt abzurufen. Dies gestaltet die Aufgabe für Programmierer einfacher und bietet eine größere Flexibilität.

Des Weiteren wurden vorher alle CFTC-Berichtcodes innerhalb von Switch-Anweisungen aufbewahrt, um auf diese Weise „simple“ Werte zurückzugeben, was die für eine Abfrage verfügbaren Ticker erheblich begrenzt hat. Mit den dynamischen Anfragen werden keine „simple string“ Ticker-IDs mehr benötigt. Auf diese Weise wird der Bibliothek ermöglicht, die Berichtcodes direkt in einer map aufzubewahren, und weitere Symbole zu unterstützen.

Boolesche Optimierungen

Eine weitere bemerkenswerte Verbesserung in Pine Script® v6 ist nicht auf den ersten Blick sichtbar, bietet aber einen erheblichen Unterschied in der Code-Effizienz. Wir haben die interne Implementierung der „bool“ Werte überarbeitet, und eine Kurschluss- (oder „faule“) Bewertung eingeführt, um somit “and“ und “or“ Operationen zu ermöglichen, sowie eine weiterführende Ausdrucksbewertung zu stoppen, wenn diese nicht erforderlich ist, um das Ergebnis zu bestimmen.

Diese Veränderungen steigern die Performance von den meisten Scripts. Der Unterschied ist besonders spürbar bei relativ großen Scripts, die stark auf Bedingungen beruhen und viele „bool“ Werte verwenden. Dies haben wir auch in unseren Tests mit einigen der beliebtesten Open-Source-Scripts ermitteln können.

Des Weiteren ermöglicht eine diesbezügliche „faule“ Bewertung auch einen klareren und bündigeren Code. Zum Beispiel: Wenn Sie eine Bedingung verwenden, die auf den Items aus einem Array beruht, dann müssen Sie vielleicht die Größe des Arrays überprüfen lassen, um auf diese Weise sicherzustellen, dass hier der Index der Items vorhanden ist, da andernfalls das Script stoppen und einen Fehler melden wird. Pine v6 ermöglicht Ihnen, mit der „faulen“ Bewertung einen einzelnen Bedingungsausdruck zu erstellen, welcher das Array prüft, bevor auf das Element zugegriffen wird, dies war in v5 nicht möglich.

//@version=6
Indikator("Demo für faule Bewertung")

//@variable Ein "bool" Array ohne festgesetzte Größe.
array<bool> myArray = array.new<bool>()

// Einen neuen Wert in `myArray` drücken, wenn `close` über `open` ist.
if close > open
   myArray.push(true)

// Zeile 13 löst einen Fehler in v5 aus, weil `myArray.first()` immer ausgeführt wird, selbst wenn der erste Ausdruck `false` ist.
// Dies funktioniert jedoch in v6, weil `myArray.first()` nur ausgeführt wird, wenn der erste Ausdruck als `true` bewertet wird.
if myArray.size() != 0 and myArray.first()
   label.new(bar_index, high, "Test")

Textgröße und Formatierung

Alle Zeichnungen, die einen Text enthalten (Boxen, Labels und Tabellen) können nun Textgrößen verwenden, die in typografischen Punkten angeführt sind — dieselben Punkte, die auch für die üblichen Texteditoren verwendet werden. Vorher hatten Sie die Wahl zwischen arbiträren size.* Konstanten, wie size.large (24) und size.huge (36). Nun können Sie sicherstellen, dass die Textgröße genau Ihren Wünschen entspricht. Sie können nun auch massive Textgrößen erstellen, die in früheren Versionen nicht möglich gewesen wären.

Des Weiteren haben wir auch einen neuen text_formatting Parameter für diese Zeichnungen hinzugefügt. Sie können ihn verwenden, um den Text kursiv, fett oder kursiv und fett zu machen.

//@version=6
Indikator("Showcase der Textgröße", overlay = true)

var t = table.new(position.bottom_center, 1, 2, bgcolor = color.yellow, frame_color = color.black, frame_width = 1)

if barstate.islastconfirmedhistory
    t.cell(0, 0, "text_size = size.huge", text_size = size.huge)
    t.cell(0, 1, "text_size = 60, bold & italicized", text_size = 60, text_formatting = text.format_bold + text.format_italic)

Strategie-Order kürzen

Die Nutzer von Strategie-Scripts wissen wahrscheinlich bereits, dass in Pine v5 eine Strategie bis zu 9000 Handelsgeschäfte simulieren kann, bevor sie die Berechnung stoppt und einen Fehler meldet (insofern nicht der Modus „Deep Backtesting“ verwendet wird). Diese Begrenzung ist besonders störend für Strategien, die häufige Handelsgeschäfte simulieren und auf diese Weise die Trigger für Alarme erstellen.

In Pine Script® v6 stoppen Strategien nicht mehr ihre Berechnungen oder melden einen Fehler, wenn sie das Limit von 9000 Handelsgeschäften erreicht haben. Stattdessen kürzt die Strategie die ältesten Order, um Platz für neue zu schaffen. Die gekürzten Order werden nicht im Strategietester angeführt, die Strategie setzt jedoch problemlos ihre Berechnungen fort. Wenn Sie sich den Index der ältesten nicht gekürzten Order ansehen möchten, dann können Sie hierfür die neue strategy.closedtrades.first_index Variable verwenden. Der Index ist nutzbar als das trade_num Argument in strategy.closedtrades.*() Funktionsaufrufen.

Negative Array-Indizes

In Pine v6 können nun die array.get(), array.set(), array.insert() und array.remove() Funktionen ein negatives Index-Argument als Referenz für Elemente akzeptieren, die am Ende eines Arrays beginnen. Sie erhalten auf diese Weise eine klarere und bündigere Methode für die Referenz von Array-Element in einer umgekehrten Reihenfolge. Zum Beispiel: Der Aufruf array.get(myArray, -2) ruft das zweitletzte Element in myArray auf, was gleichwertig zu array.get(myArray, array.size(myArray) – 2) ist.

Wenn Sie über die neuesten Verbesserungen für das Pine Script® informiert bleiben möchten, dann behalten Sie die Versionshinweise im Benutzerhandbuch im Auge — der Abschnitt für v6 enthält auch zusätzliche Veränderungen und Ergänzungen, die nicht in diesem Beitrag angeführt sind.

Wir sind der Hoffnung, dass sich diese neuen Features für Sie als nützlich erweisen werden. Senden Sie uns bitte auch weiter Ihr Feedback und Ihre Vorschläge zu. Wir verwenden diese, um unsere Plattform noch besser zu machen.

— Team TradingView

Look first Then leap

TradingView wurde für Sie entwickelt. Stellen Sie sicher, dass Sie unsere fantastischen Features optimal nutzen