Das Pine-Team hat seit dem Rollout von v5 hart daran gearbeitet, Pine noch weiter zu verbessern. Sehen wir uns einige der lang erwarteten Funktionen an, die in den letzten zwei Monaten hinzugefügt wurden.
Function Overloads
Function Overloads sind Variationen einer Funktion, die in einer Bibliothek definiert oder in ein Skript aufgenommen werden können. Overloads haben den gleichen Namen wie die ursprüngliche Funktion, verwenden aber eine andere Anzahl von Parametern oder Parameter unterschiedlichen Typen. Sie sind besonders nützlich in Bibliotheken, in denen die Parametertypen erforderlich sind.
In diesem Indikator definieren wir eine Überladung der mult() Funktion, die folgende drei Argumente annehmen kann:
//@version=5
indicator("Function overload")
// Two parameters
mult(x1, x2) =>
x1 * x2
// Three parameters
mult(x1, x2, x3) =>
x1 * x2 * x3
plot(mult(7, 4))
plot(mult(7, 4, 2))
Hier definieren wir Overloads, die je nach Art der verwendeten Argumente unterschiedlich ausgeführt werden. Wenn Overloads die gleiche Anzahl von Parametern haben wie die ursprüngliche Funktion, müssen die Parameter mit unterschiedlichen, expliziten Typen definiert werden:
//@version=5
indicator("Function overload")
// Accepts both 'int' and 'float' values because any 'int' can be automatically cast to 'float'
mult(float x1, float x2) =>
x1 * x2
// Returns a 'bool' value instead of a number
mult(bool x1, bool x2) =>
x1 and x2 ? true : false
mult(string x1, string x2) =>
str.tonumber(x1) * str.tonumber(x2)
// Has three parameters, so explicit types are not required
mult(x1, x2, x3) =>
x1 * x2 * x3
plot(mult(7, 4))
plot(mult(7.5, 4.2))
plot(mult(true, false) ? 1 : 0)
plot(mult("5", "6"))
plot(mult(7, 4, 2))
for…in
Beim Durchlaufen eines Arrays mit der for Struktur muss ein Loop Entry verhindert werden, wenn das Array leer ist, und es muss verhindert werden, dass ein Array-Index außerhalb der Grenzwerte liegt.
Die Neue for…in Struktur macht Ihnen das Leben leichter, indem sie alle Elemente eines Arrays für Sie wiederholt durchläuft. Die Syntax ist: for array_element in array_id und durchläuft die Elemente von array_id beginnend mit dem Index Null, wobei der Wert des Elements des Arrays sich der Variable des array_element bei jeder Schleifenwiederholung anpasst. Wenn das Array leer ist, treten keine Wiederholungen oder Fehler auf, und Array-Elemente können in den Schleifenwiederholung hinzugefügt oder entfernt werden.
In dem folgenden Skript verwenden wir for…in um die höchste Nummer in dem a1 Array zu finden:
//@version=5
indicator("For...in cycle")
var int[] a1 = array.from(1, 3, 6, 3, 8, 0, -9, 5)
highest(array) =>
var int highestNum = na
for element in array
if na(highestNum) or element > highestNum
highestNum := element
highestNum
plot(highest(a1))
Neue String-Manipulation Funktionen
Diese neuen Funktionen bieten mehr Möglichkeiten, Strings zu verarbeiten, und führen reguläre Ausdrücke in Pine ein. Während benutzerdefinierten String-Funktionen Arrays verwenden, können so nun Werte in „einfacher“ Form zurückgegeben werden, die man verwenden kann, um zum Beispiel ein symbol Argumente für request.security(), anzuwenden.
str.contains(source, str)
Ermittelt ob die source String einen str Substring enthält. Wir können beispielsweise feststellen, ob es sich bei dem aktuellen Chart um einen kontinuierlichen Futures-Chart handelt, indem wir nach dem „!“ Substring in der syminfo.tickerid eingebauten Variable nachschauen:
var isContinuous = str.contains(syminfo.tickerid, "!")
plot(isContinuous ? 1 : 0)
str.pos(source, str)
Ermittelt die Position des str String in dem Source String.
str.substring(source, begin_pos, end_pos)
Extrahiert ein Substring von dem Source String. In diesem Beispiel verwenden wir str.substring() und str.pos() zum Abrufen des “AAPL” Substring von dem s Input String:
s = input.string("Time to sell some NASDAQ:AAPL")
pos = str.pos(s, ":") // Get the position of the ":" character
tkr = str.substring(s, pos + 1) // "AAPL"
str.replace(source, target, replacement, occurrence)
Im Gegensatz zur bestehenden Funktion str.replace_all(), erlaubt str.replace() selektive Ersetzung eines übereinstimmenden Substrings durch einen Replacement String. In diesem Beispiel ersetzen wir das Präfix “FTX” durch “BINANCE” im ersten Symbol des Spread String:
var source = "FTX:BTCUSD / FTX:BTCEUR"
// Replace the first occurrence of "FTX" with the "BINANCE" replacement string
var newSource = str.replace(source, "FTX", "BINANCE", 0)
str.lower(source) und str.upper(source)
Wandelt alle Buchstaben des Source String in Klein- oder Großbuchstaben um:
s = str.lower("Time to Sell Some AAPL") // time to sell some aapl!
s = str.upper("Time to Sell Some AAPL!") // TIME TO SELL SOME AAPL!
str.startswith(source, str) und str.endswith(source, str)
Ermittelt, ob der Source String mit einem str Substring startet oder endet.
str.match(source, regex)
Extrahiert den Substring der mit einem spezifischen regular expression übereinstimmt. Mit regex [\\w]+:[\\w]+ ist es beispielsweise möglich, den Symbolnamen aus “It’s time to sell some NASDAQ:AAPL!” Source String zu finden und zurückzuführen:
s = "It's time to sell some NASDAQ:AAPL!"
var string tickerId = str.match(s, "[\\w]+:[\\w]+") //"NASDAQ:AAPL"
Umrechnung von Währungen
Die meisten Funktionen im request.* Namensraum können nun die von ihnen zurückgegebenen Werte in eine andere Währung umrechnen. Wenn das currency Argument im Function Call spezifiziert ist, werden die von der Funktion zurückgegebenen Preiswerte von der Ausgangswährung in die Zielwährung umgerechnet. Der currency Parameter wurde zu den folgenden Funktionen hinzugefügt:
Textboxen
Das Zeichnen von Boxen in Pine unterstützt jetzt Text! Fügen Sie einfach das Argument text zur Funktion box.new() hinzu, wenn Sie eine Box zeichnen, wird dann der Text darin angezeigt. Sie können das Verhalten des Textes einstellen, indem Sie die Werte für die Parameter text_size, text_color, text_valign, und text_halign beim Erstellen der Box festlegen oder sie auf eine der folgenden Funktionen beziehen:
Als Beispiel für diese Funktion sehen Sie hier den eingebauten Multi-Time Period Charts Indikator, der so verändert wurde, dass er die Zahl und den Höchst-/Tiefstwert der Woche anzeigt, die er hervorhebt:

Um über neue Pine-Funktionen auf dem Laufenden zu bleiben, sollten Sie die Versionshinweise in unserem Pine-Benutzerhandbuch im Auge behalten. Unsere PineCoders senden auch Updates über den Squawk Box Telegram Kanal, Twitter und natürlich den öffentlichen Pine Script Chat auf TradingView.
Wir hoffen, dass Sie diese häufig nachgefragten Funktionen nützlich finden werden. Bitte teilen Sie uns weiterhin Ihr Feedback und Ihre Verbesserungsvorschläge mit. Wir entwickeln TradingView für Sie, und wir sind immer daran interessiert, Ihre Meinung zu erfahren.