May 21, 2021

Nowe funkcje w Pine Script: str.format() i array.from()

Ta aktualizacja języka Pine Script dodaje funkcje do pracy z ciągami znaków i tablicami.

Funkcja str.format() umożliwia konwersję przekazanych jej argumentów na ciąg znaków o określonym formacie:

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

Parametr formatString zawiera indeks N w nawiasach “{}” do zastępowania odpowiednich sformatowanych argumentów (arg0, arg1..argN, które są ciągami lub liczbami) oraz niektóre z wzorców omówionych poniżej.

Teraz do zarządzania ciągami nie musisz już używać konstrukcji z funkcją str.replace_all():

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

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

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

Możesz to zrobić w nowy, wygodniejszy i krótszy sposób:

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

Ujęte w nawiasy indeksy {0} i {1} zastępowane są odpowiednimi argumentami porządkowymi: {0} – wynik wykonania operatora trójskładnikowego, ciąg “buy” lub “sell”, jest zwracany w zależności od nierówności cen close i open, {1} – syminfo.ticker, bieżący symbol na wykresie:

Używając szablonu number, liczba skonwertowana na ciąg może zostać przekonwertowana na inną reprezentację, na przykład w celu ograniczenia liczby miejsc po przecinku:

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

Odrzuć część ułamkową liczby:

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

Uzyskaj informacje finansowe:

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

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

Uzyskaj wartości w procentach:

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

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

Funkcja str.format() obsługuje szablon date do formatowania daty/czasu.

Ten skrypt wyświetla liczbę miesięcy, tygodni i dni od początku roku:

//@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)

Tylko jedna zmienna timenow jest przekazywana do funkcji str.format(), która zawiera UNIXową reprezentację czasu: aktualną datę, czas i strefę czasową giełdy symbolu na wykresie. Ciąg jest formatowany przy użyciu znaków Y, M, D, F (rok, miesiąc, dzień, tydzień miesiąca), znaku specjalnego \n do zawijania linii oraz pojedynczych cudzysłowów ‘’ do wstawiania tekstu pomiędzy znaki.

Ten skrypt wypisuje do etykiety sformatowane ciągi znaków oraz odpowiadający im wynik funkcji str.format() z różnymi znakami:

//@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))

Lewa kolumna etykiety zawiera znaki ujęte w {}, prawa jest wynikiem działania funkcji str.format:

Zmienna t jest przekazywana do funkcji str.format(), która zawiera UNIXową reprezentację czasu: bieżącą datę, czas i strefę czasową.

Kolejną nowością jest funkcja array.from(), która przyjmuje zmienną liczbę argumentów wejściowych jednego z następujących typów: float, int, bool, string, label, line, color i zwraca tablicę odpowiedniego typu. Funkcja ta pozwala na zadeklarowanie tablicy, przypisanie jej wartości początkowych i przypisanie wyniku do dowolnej zmiennej w jednej linijce kodu.

Dotychczas, aby utworzyć tablicę i wypełnić ją wartościami początkowymi, musiałeś użyć funkcji array.new() oraz funkcji array.push() lub array.set():

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

Teraz, aby utworzyć tablicę, która będzie zawierała kolory wykresów, wystarczy jedna linia:

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

Funkcja automatycznie renderuje tablicę plotColors na typ color[] na podstawie otrzymanych argumentów:

//@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))

Informacje o funkcjach str.format() i array.from() są zawsze dostępne w naszej Dokumentacja języka skryptowego Pine.

Jeśli chcesz wiedzieć o aktualizacjach Pine, gdy tylko się pojawią, sprawdzaj sekcję Informacje o Wersji w naszej Instrukcji Obsługi Pine. Konto PineCoders przekazuje również wiadomości o aktualizacjach w swoim kanale Squawk Box Telegram, na Twitterze i na publicznym czacie Pine Script na TradingView.

Mamy nadzieję, że nowe funkcje okażą się dla Ciebie przydatne. Prześlij nam swoje opinie i sugestie – tworzymy TradingView dla Ciebie i cieszymy się, gdy mówisz nam, co myślisz o aktualizacjach naszej platformy.

Look first / Then leap

Otwórz wykres