Neue Funktionen in Pine Script: str.format() und array.from()

May 21, 2021

Dieses Update der Pine Script Sprache fügt Funktionen für die Arbeit mit Strings und Arrays hinzu.

Mit der Funktion str.format() können Sie die an sie übergebenen Argumente in einen Strings mit einem bestimmten Format umwandeln:

str.format(formatString, arg0, arg1, ...) -> string

Die formatString enthält ein tiefgestelltes N in Klammern „{}“, um die entsprechenden formatierten Argumente zu ersetzen (arg0, arg1..argN, welche Zeichenketten oder Zahlen sind), sowie einige der unten besprochenen Muster.

Für das Parsen von Strings müssen Sie also nicht mehr eine Konstruktion mit der Funktion str.replace_all() verwenden:

txt := "Time to {0} some {1}!"

txt := str.replace_all(txt, "{0}", close > open ? "buy" : "sell")

txt := str.replace_all(txt, "{1}", syminfo.ticker)

aber Sie können es auf eine neue, bequemere und kürzere Weise tun:

txt = str.format("Time to {0} some {1}!", close > open ? "buy" : "sell", syminfo.ticker)

Die in Klammern eingeschlossenen Kleinbuchstaben {0} und {1} werden durch die entsprechenden ordinalen Argumente ersetzt: {0} – das Ergebnis der Ausführung des ternären Operators, der String „buy“ oder „sell“, wird abhängig von der Ungleichheit der Preise close und open zurückgegeben, {1} – syminfo.ticker, das aktuelle Symbol auf dem Chart:

Mit Hilfe der Zahlenvorlage kann die in eine Zeichenkette umgewandelte Zahl in eine andere Darstellung umgewandelt werden, um z. B. die Anzahl der Nachkommastellen zu begrenzen:

str.format("{0,number,#.#}", 1.34) // returns: 1.3

Verwerfen Sie die Nachkommastelle der Zahl:

str.format("{0,number,integer}", 1.34) // returns: 1

Erhalten Sie finanzielle Informationen:

str.format("The cash turnover amounted to {0,number,currency}", 1340000) 

// “The cash turnover amounted to $1,340,000.00”.

Prozente erhalten:

str.format("Expected return is {0,number,percent} - {1,number,percent}", 0.1, 0.2)  

// returns: Expected return is 10% - 20%. 

Die Funktion str.format() unterstützt die Datumsvorlage zur Formatierung von Datum/Uhrzeit.

Dieses Skript zeigt die Anzahl der Monate, Wochen und Tage seit Jahresbeginn an:

//@version=4
study("str_format_date")

//formatting string with date pattern
txt = str.format("Current bar date: {0,date, Y-MM-d'.' \n M 'months \n' F 'weeks \n' D 'days \n from the beginning of the year' }", timenow)

//printing label
var l1 = label.new(na, na, color = #FFFFFF00)
label.set_x(l1, bar_index)
label.set_yloc(l1, yloc.belowbar)
label.set_text(l1, txt)

plot(close)

An die Funktion str.format() wird nur eine Variable timenow übergeben, die die UNIX-Zeitdarstellung enthält: das aktuelle Datum, die Uhrzeit und die Zeitzone für die Börse eines Symbols auf dem Chart. Die Zeichenfolge wird mit den Zeichen Y, M, D, F (Jahr, Monat, Tag, Woche des Monats), dem Sonderzeichen \n für Zeilenausbrüche und einfachen Anführungszeichen ‘’ zum Einfügen von Text zwischen Zeichen formatiert.

Dieses Skript gibt formatierte Zeichenketten im Label und das entsprechende Ergebnis der Funktion str.format() mit verschiedenen Zeichen aus:

//@version=4
study("str_format_date_time")

// creating date-time variable: 2021.05.04. 14:30:59
t = timestamp("GMT+0", 2021, 05, 04, 14, 30, 59)

// function for left side of the label
f_print_left(_text)  => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_right, color.green, size.large, text.align_right), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

// function for right side of the label
f_print_right(_text) => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_left, color.red, size.large, text.align_left), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

var string format = 
  "{0,date,y.MM.dd hh:mm:ss}\n" +
  "{1,date,short}\n" +
  "{2,date,medium}\n" +
  "{3,date,long}\n" +
  "{4,date,full}\n" +
  "{5,date,h a z (zzzz)}\n" +
  "{6,time,short}\n" +
  "{7,time,medium}\n" +
  "{8,time,long}\n" +
  "{9,time,full}\n" + 
  "{10,time,hh:mm:ss}\n" +
  "{11,time,HH:mm:ss}\n"

// printing format string 
f_print_left(format)
//printing formatted string
f_print_right(str.format(format, t, t, t, t, t, t, t, t, t, t, t, t))

Die linke Spalte des Labels enthält die in {} eingeschlossenen Zeichen, die rechte ist das Ergebnis der Funktion str.format:

Die Variable t wird an die Funktion str.format() übergeben, die die UNIX-Zeitdarstellung enthält: das aktuelle Datum, die Uhrzeit und die Zeitzone.

Die nächste Neuerung ist die Funktion array.from(), die eine variable Anzahl von Eingangsargumenten eines der folgenden Typen entgegennimmt: float, int, bool, string, label, line, color und ein Array des entsprechenden Typs zurückgibt. Die Funktion ermöglicht es Ihnen, ein Array zu deklarieren, ihm Anfangswerte zuzuweisen und das Ergebnis einer beliebigen Variablen in nur einer Codezeile zuzuweisen.

Um ein Array zu erstellen und es mit Anfangswerten zu füllen, mussten Sie bisher die Funktion array.new() und die Funktionen array.push() oder array.set() verwenden:

Um ein Array zu erstellen und es mit Anfangswerten zu füllen, mussten Sie bisher die Funktion array.new() und die Funktionen array.push() oder array.set() verwenden:

color[] plotColors = array.new_color(size=0)
array.push(plotColors, color.red)
array.push(plotColors, color.green)
array.push(plotColors, #0000FF)

Um nun ein Array zu erstellen, das die Farben der Charts enthält, kommen Sie mit nur einer Zeile aus:

plotColors = array.from(color.red, color.green, #0000FF)

Die Funktion wandelt das Array plotColors automatisch in den color[] Typ um, basierend auf den empfangenen Argumenten:

//@version=4
study(title="array_from")

f_arr (series1, series2, color1, color2) =>
    [ array.from(series1, series2), array.from(color1, color2) ]

[lines, colors] = f_arr(close, open, color.red, color.green)    

plot ( array.get(lines, 0), color = array.get(colors, 0))
plot ( array.get(lines, 1), color = array.get(colors, 1))

Informationen zu diesen Funktionen str.format() und array.from() finden Sie immer in unserem Referenzhandbuch.

Wenn Sie über Aktualisierungen von Pine Script informiert werden möchten, sehen Sie sich den Abschnitt Versionshinweise an. Das PineCoders-Konto sendet auch Updates auf seinem Squawk Box Telegram-Kanal, Twitter und dem öffentlichen Pine Script-Chat auf TradingView.

Wir hoffen, dass Sie diese Verbesserungen nützlich finden und bitten Sie, uns weiterhin Ihre Meinung mitzuteilen. Wir bauen TradingView für unsere User auf und freuen uns, wenn Sie uns Ihre Meinung zu unseren Innovationen mitteilen.

Look first Then leap

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