Nowości w Pine: przeciążenia, funkcje do pracy z ciągami i wiele więcej!

Dec 23, 2021

Zespół Pine ciężko pracował, aby nadal ulepszać Pine od czasu wprowadzenia wersji v5. Przyjrzyjmy się niektórym z długo oczekiwanych funkcji dodanych w ostatnich miesiącach.

FUNKCJE PRZECIĄŻENIA

Przeciążenia to odmiany funkcji, które można zdefiniować w bibliotece lub dołączyć do skryptu. Przeciążenia mają taką samą nazwę co oryginalna funkcja, ale używają różnych ilości parametrów lub parametrów różnych typów. Są szczególnie przydatne w bibliotekach z wymaganymi typami parametrów.

W tym wskaźniku definiujemy przeciążenie funkcji mult(), która przyjmuje trzy argumenty:

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

Tutaj definiujemy przeciążenia, które działają inaczej, w zależności od typu użytych argumentów. Gdy przeciążenia mają taką samą ilość parametrów jak oryginalna funkcja, parametry muszą być zdefiniowane przy użyciu różnych, jawnych typów:

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

Iteracja po tablicy ze strukturą for wymaga zapobiegania wejścia w pętlę, jeśli tablica jest pusta i chroni przed indeksem tablicy spoza zakresu.

TNowa struktura for…in ułatwia Ci życie, iterując wszystkie elementy tablicy za Ciebie. Składnia jest prosta: for array_element in array_id wykona iterację po elementach array_id zaczynając od indeksu zero, przypisując wartość elementu tablicy do zmiennej array_element w każdej iteracji. Jeśli tablica jest pusta, to nie nastąpią żadne iteracje i nie pojawią się żadne błędy. Elementy tablicy można dodawać lub usuwać w iteracjach pętli.

W poniższym skrypcie używamy for…in aby znaleźć najwyższą liczbę w tablicy a1:

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

Te nowe funkcje zapewniają więcej sposobów przetwarzania ciągów i wprowadzają wyrażenia regularne do Pine. Zauważ, że w przeciwieństwie do zdefiniowanych przez użytkownika funkcji łańcuchowych używających tablic, mogą one zwracać wartości w „prostej” formie,której można użyć na przykład do tworzenia argumentów symboli dla request.security().

str.contains(source, str)

Określa, czy ciąg źródłowy zawiera podciąg str. Na przykład możemy określić, czy bieżący wykres jest ciągłym wykresem kontraktów terminowych, szukając znaku „!” podciąg we wbudowanej zmiennej syminfo.tickerid built-in variable:

var isContinuous = str.contains(syminfo.tickerid, "!")  
plot(isContinuous ? 1 : 0)

str.pos(source, str)

Zwraca pozycję ciągu str w ciągu source.

str.substring(source, begin_pos, end_pos)

Wyodrębnia podciąg z ciągu source. W tym przykładzie używamy str.substring() i str.pos() do pobrania podciągu “AAPL” z ciągu wejściowego 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)

W przeciwieństwie do istniejącej funkcji str.replace_all() function, str.replace() umożliwia selektywne zastąpienie dopasowanego podciągu ciągiem zastępczym. W tym przykładzie zastępujemy prefiks“FTX” prefiksem “BINANCE” dla pierwszego symbolu w łańcuchu rozkładowym:

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) and str.upper(source)

Zmień wszystkie litery w ciągu source na małe lub wielkie:

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) and  str.endswith(source, str)

Określ, czy ciąg source zaczyna się lub kończy podciągiem str .

str.match(source, regex)

Wyodrębnij podciąg pasujący do określonego regularnego wyrażenia. Na przykład za pomocą wyrażenia regularnego [\\w]+:[\\w]+ można znaleźć i zwrócić nazwę symbolu z ciągu źródłowego “It’s time to sell some NASDAQ:AAPL!”:

s = "It's time to sell some NASDAQ:AAPL!"
var string tickerId = str.match(s, "[\\w]+:[\\w]+") //"NASDAQ:AAPL"

Konwersja Walut

Większość funkcji w przestrzeni nazw request.* może teraz konwertować zwracane wartości na inną walutę. Jeśli w wywołaniu funkcji podane jest currency, wartości cen zwracane przez funkcję zostaną przeliczone z waluty źródłowej na docelową. Parametr currency został dodany do poniższych funkcji:

POLA TEKSTOWE

Narzędzie do rysowania obsługuje teraz również teksty pisane! Wystarczy dodać wartość text do funkcji box.new() za każdym razem, gdy narysujesz prostokąt, a tekst zostanie w nim wyświetlony. Tekst można dostosować za pomocą parametrów text_size, text_color, text_valign i text_halign podczas tworzenia prostokąta lub poprzez dostęp do istniejącego obiektu za pomocą jednej z następujących funkcji:

Przykładem tej funkcji jest wbudowany wskaźnik wykresów z wieloma okresami czasu zmodyfikowany tak, aby wyświetlał liczbę i maksimum/minimum tygodnia, który podświetla:

Aby być na bieżąco z nowymi funkcjami w Pine, zapoznaj się z publikacjami na temat korzystania z Pine. Nasi PineCoders transmitują również aktualizacje na kanale Squawk Box w komunikatorze Telegram, na Twitter i z publicznego czatu Pine Script na TradingView.

Mamy nadzieję, że te mocno wyczekiwane funkcje okażą się przydatne. Prosimy o przekazywanie nam swoich opinii i sugestii dotyczących kolejnych ulepszeń. Tworzymy TradingView dla Ciebie i zawsze chętnie Cię wysłuchamy.

Look first Then leap

TradingView jest stworzony dla Ciebie. Upewnij się, że w pełni wykorzystujesz nasze niesamowite funkcje
Otwórz wykres