Pine Script — скриптовый язык программирования для создания индикаторов и стратегий для платформы TradingView. Разработчики утверждают что большинство встроенных индикаторов написаны также на Pine.
Я также записал несколько видео посвященных как платформе TradingView, так и языку программирования Pine Script. Если формат видео удобнее то все они в плейлисте TradingView + Pine Script.
Скрипты пишутся во встроенном в платформу редакторе, исходные коды также сохраняются на платформе и могут быть как публичными, так и приватными.
Если скрипт публичен, то его исходный код может увидеть любой пользователь TradingView. В одно нажатие этот код может быть скопирован, а затем изменен и оставлен в привате или опубликован после изменения.
Скрипт по сути простыня текста, которая содержит выражения, операторы, определения функций и вызовы функций. Язык простой. Здесь нет ни классов, ни разбиения на файлы/классы и прочее. Полноценная декомпозиция невозможна. Поддержки версий нет. Использовать какие либо IDE нельзя. Доступа из скрипта в консоль в Pine Editor нет, как и инструментов отладки (но сообщения компилятора и ошибки в консоль выводятся).
Результат работы скрипта это либо вывод информации на график (индикатор) или совершение сделок (стратегия).
Важно про обновление Pine Script до версии 5
В конце 2021 года Pine Script обновился до версии 5 и в этом обновлении произошло множество изменений как в синтаксисе, так и в функционале. Старые скрипты продолжат работать если указывать в @version=4. А для обновления под 5 версию нужно внести некоторые изменения в код. Подробно обо всем смотри в этом видео.
Стоимость использования Pine Script
Использование Pine Script бесплатно на всех тарифных планах TradingView. На некоторых тарифах вы можете ограничивать публичность скриптов (вероятно для монетизации ваших скриптов).
Ограничения на скрипты
Так как скрипты выполняются на серверах TradingView, то на скрипты могут накладываться ограничения для того чтобы большие и сложные скрипты излишне не нагружали сервера и не мешали работе скриптов других пользователей.
Ограничения могут коснуться:
- количество баров
- времени исполнения скрипта
- объема потребляемой памяти
- размера скрипта
Например количество баров которые мы можем увидеть ограничено 5000 для пользователей бесплатного тарифа (так написано в документации, но по моим наблюдениям это не всегда так :) ).
Структура скрипта Pine
Пример скрипта можно увидеть в редакторе Pine если выбрать Открыть — Новый индикатор ( или Новая стратегия )
Например индикатор может выглядеть вот так :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
//@version=5 indicator("Мой скрипт") plot(close) Некоторые элементы скрипта обязательны, некоторые нет. Ниже пример более сложного индикатора и комментарии которые описывают структуру: //@version=5 // ^^^ директива компилятору какую версию языка использовать // если не указать то будет исп. версия 1 // версия между собой не совместимы // функция аннотация - описывает скрипт // indicator - индикатор // strategy - стратегия // library - библиотека indicator("Azzrael sample script", overlay=true) // определение функции fn() => // локальные выражения выделяются отступами // строго !!! равными 4 символам или табуляции a = 9 b = a + 3 [a, b] // последняя строка - возвращаемое значение, в данном сл. кортеж // вызов функции [i1, i2] = fn() // выражения можно переносить но ВАЖНО соблюдать правило // перенесенная строка начинается как мин. с 1го пробела, но не с 4 и не с табуляции title = "Третья " + "скользящая" + "значение" // на одной стр можно писать неск выражений разделяя их зпт width = 4, color1 = color.yellow // можно переносить строки и при вызове функций i3 = input(26, title) // ВАЖНО!!! Нельзя вставлять комментарии при переносе строк (кроме последней) // вызов встроенных функций ma1 = sma(close, i1) ma2 = sma(close, i2) ma3 = sma(close, i3) // вызов встроенной функции аннотации plot(ma1, color=color1) plot(ma2, color=color.blue) plot(ma3, color=color.green, linewidth=width) |
Использование либо
indicator либо
strategy , либо
library в скрипте ОБЯЗАТЕЛЬНО.
Отличие indicator или strategy
indicator инициализирует Индикатор, strategy — Стратегию. В PineScript до версии 5 вместо indicator использовалось ключевое слово study.
Индикатор обязан использовать хотя бы одну функцию для вывода информации на график (напр. plot). Стратегия обязана использовать хотя бы одну функцию для совершения сделки (напр. strategy.entry() ).
Стратегия — скрипт предназначенный для совершения сделок. Как в реальном времени так и для тестирования в тестере стратегий TradingView на исторических данных. Стратегия также может что-то выводить на график (например значки о совершенных сделках). Индикатор предназначен для вывода информации на график инструмента и не может совершать сделки, но зато потребляет меньше ресурсов и работает быстрее.
И Стратегия и Индикатор могут создавать Алерты.
Модель работы скриптов Pine
Важно понимать что ваш скрипт выполняется многократно для КАЖДОГО бара начиная с самого старого доступного. При этом индекс “текущего” (самого правого) бара равен 0. По мере работы скрипта он как бы смещается по барам слева направо.
Когда Индикатор достигает текущего, не закрытого ещё бара, то скрипт выполняется каждый тик (при каждом обновлении цены или объема) до тех пор пока бар не закроется. Скрипт выполняется ещё один раз на закрытии бара.
Стратегия по умолчанию считается только по закрытии текущего бара, однако её также можно настроить на пересчет по каждому тику.
Серии
В Pine Script есть важнейший тип данных — Серии. В сериях хранятся например данные баров close, open, high, low и т.д. Серии можно воспринимать как динамический массив. По мере перемещения скрипта по барам серия дополняется значениями.
Серия важнейшее понятие Pine Script. В сериях хранятся все важные данные, серии возвращаются в качестве ответа многих функций технического анализа PineScript. Например ma = ta.sma(close, 14) вернет нам серию значений простой скользящей средней.
Серии могут быть series int, series float, series string. Но серии не могут иметь смешанные типы. В этом серии в PineScript опять напоминают строго типизированные динамические массивы.
С сериями можно совершать некоторые операции. Складывать, вычитать, умножать. В PineScript вы будете постоянно работать с сериями.
Продолжение теории по типам, операндам, операторам возможно будет дополняться в дальнейшем.
Визуализация в PineScript (линии, метки, таблицы)
Визуальный анализ неотъемлемая часть технического анализа. Поэтому в PineScript существует много объектов которые мы можем выводить как в окне графика, так и в окне под графиком. В первую очередь при отрисовки нужно осознать концепцию побарной работы скриптов, о которой я уже упоминал выше. Но более подробно об этом в видео ниже:
Ниже список моих видео посвященных каждому объекту визуализации в PineScript. Я постепенно дополняю этот список снимая новые видео. Все их вы найдете в плейлисте посвященном PineScript на Azzrael Code.
- Линии (line.new) — рисую горизонтальные (но не hline.new) и вертикальные линии
- Метки (label.new) — метки с привязкой к барам
- Заливка фона под баром — как закрасить фон в нужный цвет в зависимости от расчетов
- Заливка произвольной области ограниченной plot или hline
Пересечения цен и линий в PineScript
Часто торговым сигналом является пересечение ценой или индикатором определенного уровня или их взаимное расположение. В PineScript есть простые методы для работы с пересечениями серий — ta.cross, ta.crossunder, ta.crossover. Я подробно рассмотрел их работу в видео:
Alert в Pine Script
Вам может показаться что алерты в TradingView — это банальный инструмент для надоедливых уведомлений, однако это совершенно не так. Благодаря возможности навесить на Alert WebHook, этот инструмент превращается в волшебный мост к вашему брокеру или внешнему инструменту анализа. Мне очень нравятся алерты в TradingView, кроме того что вебхуки доступны только на платных тарифах — это, конечно, печально. Подробнее здесь:
Продолжение следует и сначала все публикуется в видео на канале Azzrael Code! Если интересуешься техническим анализом, Trading View, разными айтишными штуками вокруг инвестиций и трейдинга — ПОДПИСЫВАЙСЯ!
Сергей 2022-12-26