Июнь 25, 2019

Представляем Pine Script v4!

Встречайте новую версию языка Pine Script! Четвёртая версия включает в себя массу новых возможностей. Мы поработали над улучшением структуры языка и исправили ряд проблем. Однако основная, самая запрашиваемая и долгожданная «фишка» четвёртой версии — поддержка объектов рисования!

В этой статье мы проведём краткий обзор новых возможностей Pine Script v4. Чтобы ознакомиться подробнее, вы можете изучить документацию (можно сразу перейти к разделу с описанием дровинг-объектов) и справочные материалы.

Объект рисования label

Позволяет рисовать на графике метки, в том числе содержащие произвольный текст. Чтобы нарисовать такую метку, воспользуйтесь функцией label.new. Пример скрипта, который рисует метку с ценой закрытия на последнем баре:

//@version=4
study("Last Bar Price", overlay=true)

l = label.new(bar_index, na, 'last price is '+tostring(close), 
  color=close >= open ? color.green : color.red, 
  textcolor=color.white,
  style=label.style_labeldown, yloc=yloc.abovebar)

label.delete(l[1])


Создав объект label, вы можете его изменять и удалять, используя соответствующие функции семейства label.*. Пример более сложного скрипта с использованием label — Pivot Points High/Low.

Объект рисования line

Позволяет рисовать на графике линии. Чтобы создать объект line, используйте функцию line.new. Пример простейшего скрипта, который рисует линию, соединяющую точки значений high на текущем баре и low на 10 баре в истории:

//@version=4
study("Line", overlay=true)
l = line.new(bar_index, high, bar_index[10], low[10], width = 4)
line.delete(l[1])

Объекты line можно изменять и удалять, используя соответствующие функции семейства line.*Пример более сложного скрипта с использованием line — Zig Zag.

Обратите внимание, что на данный момент мы можем отображать на графике суммарно не более 50–55 объектов рисования одного типа (label или line) на скрипт. Это намеренное ограничение, призванное предотвратить чрезмерные нагрузки на серверы. 

Новые типы данных line и label значительно расширяют возможности Pine Script, позволяя реализовать сложную логику популярных индикаторов в пользовательских скриптах. С примерами вы можете ознакомиться в документации.

Серийные строки

Мы реализовали поддержку серийных переменных строкового типа. Пример использования серийных строк в объектах label:

//@version=4
study("Series string", overlay = true)
draw_label(title) =>
    label.new(bar_index, high, text=title)
t = close >= open ? "green" : "red"
draw_label(t)

Ключевое слово var

Переменная, объявленная обычным способом, реинициализируется при каждом очередном просчете скрипта. Из-за этого возникает проблема сохранения значения, записанного в переменную на предыдущем баре. Ключевое слово var объявляет переменную и инициализирует её однократно. Это позволяет сохранить значение переменной между барами с момента инициализации или последнего присваивания. Например, скрипт, подсчитывающий количество «зелёных» баров на графике: 

//@version=4
study("My Script")
var s = 0.0
if close >= open
    s := s + 1
plot(s)

При каждом выполнении условия close >= open значение переменной s будет увеличиваться на единицу. Инициализирующим значением может быть любое арифметическое выражение.

Синтаксис объявления переменных с ключевым словом var позволяет избежать употребления в коде конструкций вида: s := nz(s[1], s), что может быть очень полезно при работе с объектами рисования.

Переименование встроенных констант, переменных и функций

В Pine Script v4 был выполнен ряд переименований встроенных констант, переменных и функций, представленный ниже:

  1. Константы значений цветов (например, red) перемещены в пространство имен color.* (например, color.red).
  2. Функция color переименована в color.new.
  3. Константы для типов аргументов (например, integer) перемещены в пространство имен input.* (например, input.integer). 
  4. Константы стилей плотов (например, стиль histogram) перемещены в пространство имен plot.style_* (например, plot.style_histogram).
  5. Константы стилей для функции hline (например, стиль dotted) перемещены в пространство имен hline.style_* (например, hline.style_dotted).
  6. Константы дней недели (например, sunday) перемещены в пространство имен dayofweek.* (например, dayofweek.sunday).
  7. Переменные текущей резолюции графика (например, period, isintraday) перемещены в пространство имен timeframe.* (например, timeframe.period, timeframe.isintraday).
  8. Переменная interval переименована в timeframe.multiplier.
  9. Переменные ticker и tickerid переименованы в syminfo.ticker и syminfo.tickerid соответственно.
  10. Переменная, обозначающая индекс бара n, переименована в bar_index.

Переименования были сделаны для структурирования стандартных средств языка и, в конечном счете, облегчения работы с кодом. Новые имена сгруппированы в соответствии с их назначением под общими префиксами таким образом, что, к примеру, набрав в редакторе «color» и нажав комбинацию клавиш Ctrl + Space, вы увидите список со всеми доступными константами цветов.

Явное указание типа переменных

В Pine Script v4 стало невозможным создание переменных, чей тип данных не известен на момент объявления (см. na значение). Это было сделано, чтобы избежать целого ряда проблем, возникающих, когда тип переменной изменяется уже после её инициализации значением na. Теперь при объявлении переменных со значением na нужно указывать их тип явно, используя ключевые слова или функции приведения типов (например, float):

//@version=4
study("NA", overlay=true)
float a = na
a := if close >= open
    high
else
    low
plot(a)

Пробуйте, экспериментируйте с новой версией Pine Script v4! Некоторые из наших пользователей уже познакомились с возможностями четвёртой версии и написали несколько впечатляющих скриптов с использованием объектов рисования.

Например, Ricardo Santos написал целую серию скриптов, с которыми вы можете ознакомиться ниже:

Joris Duyck написал скрипт Trendlines, иллюстрирующий возможности объекта рисования line.

Надеемся, что эти примеры послужат для вас вдохновением. Обсудить возникшие вопросы, проблемы и поделиться своими впечатлениями о Pine Script v4 c другими пользователями вы можете в нашем чате. Мы благодарим участников независимого сообщества Pinescripters за помощь в бета-тестировании (ребята, огромное вам спасибо!). Вы также можете задать конкретные вопросы по коду на странице сообщества на Stack Overflow.

Спасибо, что выбираете TradingView!