Новое в Pine: перегрузки, новые функции для работы со строками и многое другое!

23 дек, 2021

С момента выхода v5, команда Pine упорно трудилась, продолжая улучшать Pine Script. Давайте рассмотрим некоторые из долгожданных нововведений, которые они добавили за последние два месяца.

Перегрузки функций

Перегрузки функции — это варианты функции, которые могут быть определены в библиотеке или в коде индикатора. Перегрузки имеют то же имя, что и исходная функция, но используют разное количество параметров или параметры разных типов. Они особенно полезны в библиотеках, где указание типов параметров является обязательным.

В этом индикаторе мы определяем перегрузку функции mult(), которая принимает три аргумента:

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

Ниже мы определяем перегрузки, которые работают по-разному в зависимости от типа используемых аргументов. Когда перегрузки имеют такое же количество параметров, что и исходная функция, тип параметров должен быть указан явно:

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

Чтобы перебрать массив с использованием цикла for, необходимо проверить, что он не пустой и защитить цикл от шанса выйти за пределы массива.

Новая структура for…in облегчает эту задачу, перебирая массив по элементам. Синтаксис прост: for array_element in array_id будет перебирать элементы array_id, начиная с нулевого индекса, присваивая значение элемента массива переменной array_element на каждой итерации. Если массив пуст, то итераций не произойдет и никаких ошибок не появится. Элементы массива могут быть добавлены или удалены в итерациях цикла.

В приведенном ниже скрипте мы используем for…in, чтобы найти наибольшее число в массиве 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))

Новые функции для работы со строками

Эти новые функции предоставляют больше способов обработки строк и вводят регулярные выражения в Pine. Обратите внимание, что, в отличие от пользовательских строковых функций, использующих массивы, они могут возвращать значения формы simple, которые можно использовать, например, для создания аргументов symbol для request.security().

str.contains(source, str)

Определяет, содержит ли строка source подстроку str. Например, мы можем определить, является ли текущий график непрерывным графиком фьючерсов, выполнив поиск подстроки “!” во встроенной переменной syminfo.tickerid:

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

str.pos(source, str)

Возвращает позицию строки str в строке source.

str.substring(source, begin_pos, end_pos)

Извлекает подстроку из строки source. В этом примере мы используем str.substring() и str.pos() для извлечения подстроки “AAPL” из входной строки s:

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)

В отличие от существующей функции str.replace_all(), функция str.replace() позволяет выборочно заменять совпадающую подстроку заменяемой строкой. В этом примере мы заменяем префикс “FTX” на “BINANCE” для первого символа в спреде:

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

Преобразует все буквы строки source в нижний или верхний регистр:

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

Определяет, начинается ли строка source с подстроки str и заканчивается ли строка source подстрокой str.

str.match(source, regex)

Извлекает подстроку, соответствующую указанному регулярному выражению. Например, с помощью регулярного выражения [\\w]+:[\\w]+ можно найти и вернуть название символа из исходной строки «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"

Конвертация валюты

Большинство функций в пространстве имен request.* теперь могут конвертировать возвращаемые значения в другую валюту. Если в вызове функции указан аргумент currency, значения цен, возвращаемые функцией, будут конвертированы из исходной валюты в целевую валюту. Параметр «валюта» был добавлен в следующие функции:

Текстовые поля

Инструмент рисования Прямоугольник, доступный в Pine, теперь поддерживает и работу с текстом! Нужно просто добавить значение параметру text функции box.new(), и переданный туда текст будет отображён внутри прямоугольника. Текст можно настроить при помощи параметров text_size, text_color, text_valign, и text_halign при создании прямоугольника, или обратившись к уже существующему объекту через одну их следующих функций:

Пример нового функционала — наш встроенный индикатор Multi-Time Period Charts, в который мы для демонстрации добавили текст, выводящий порядковый номер недели и её макс./мин.:

Чтобы быть в курсе нововведений Pine, смотрите раздел Release notes нашего руководства пользователя Pine. Наши PineCoders также транслируют обновления в телеграмм-канале Squawk Box, в Twitter и в публичном чате Pine Script на TradingView.

Мы надеемся, что вы найдете эти востребованные функции полезными. Пожалуйста, продолжайте оставлять нам свои отзывы и предложения по улучшению. Мы создаем TradingView для вас, и мы всегда рады услышать ваше мнение.

Look first Then leap

Мы создали TradingView, чтобы вы могли пользоваться самыми крутыми функциями.
Открыть график