Поделиться

Pine Script: что это за язык и как он работает в TradingView

Обложка статьи «Pine Script: что это за язык и как он работает в TradingView»: Учебный код Pine Script v6 и последовательный расчёт по барам
Что вы узнаете
  • Разберёте три обязательные части скрипта и порядок выполнения по барам
  • Отличите индикатор, стратегию и библиотеку до написания кода
  • Запустите минимальный пример Pine Script v6 и проверите линию SMA
  • Поймёте, почему значение на открытом баре может меняться
Применить за 25 мин
Новичкам
22просмотров

Что такое Pine Script и какие задачи он решает в TradingView

Pine Script встроен в TradingView. Пользователь открывает Pine Editor, пишет текст программы, сохраняет его и добавляет результат на график. Платформа компилирует исходный текст, получает программу и запускает её на доступном наборе баров. Отдельный локальный компилятор для первого знакомства не нужен.

В TradingView Pine Script получает готовые ряды графика, поэтому первая проверка может быть небольшой: одна формула, один параметр и одна линия.

Обычно язык используют для четырёх задач:

  1. Рассчитать ряд, например скользящую среднюю, диапазон или пользовательский осциллятор.
  2. Нарисовать линию, метку, цвет фона или другой результат рядом с ценой.
  3. Описать правила стратегии и получить симуляцию гипотетических заявок в тестере.
  4. Вынести повторно используемые функции и пользовательские типы в библиотеку.

Ключевое слово здесь - правило. Скрипт не понимает расплывчатую идею вроде «покажи сильное движение». Ему нужны наблюдаемые условия: какие данные взять, за какой период считать, что сравнить и что вывести. Чем точнее правило, тем легче проверить код на нескольких барах вручную.

  1. 1

    Исходный текст

    Версия, объявление и инструкции

  2. 2

    Компиляция

    Проверка синтаксиса и типов

  3. 3

    Бары графика

    Последовательное выполнение на данных

  4. 4

    Ряды значений

    Результат для каждого доступного бара

  5. 5

    Отображение

    Линии, метки или отчёт стратегии

Текст проходит компиляцию, затем программа выполняется на барах и формирует последовательность значений. Схема объясняет процесс, а не внутреннюю инфраструктуру TradingView. На узком экране она прокручивается по горизонтали.

Источник схемы: авторское резюме официальных разделов First steps и Execution model. Схема не изображает интерфейс или закрытую инфраструктуру TradingView.

Из чего состоит скрипт: версия, объявление и основной код

В официальной структуре Pine Script есть три части. Первая - аннотация версии вида //@version=6. Она сообщает компилятору, с какой версией языка написан код. Если аннотацию пропустить, поведение может соответствовать старой версии, поэтому в новом учебном примере версию лучше указывать явно.

Вторая часть - объявление. В скрипте используется одна из функций: indicator(), strategy() или library(). Она определяет тип программы и доступные возможности. У индикатора можно задать имя и параметр overlay, у стратегии - свойства моделирования, у библиотеки - описание набора экспортируемых сущностей.

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

Сначала полезно читать скрипт сверху вниз как паспорт:

  • какая версия языка заявлена;
  • какой тип программы объявлен;
  • какие параметры может менять пользователь;
  • из каких исходных рядов строится расчёт;
  • какой результат выводится или моделируется.
  • Читаем сверху вниз

    //@version=6 - plot() или команд…

  1. //@version=6

    Версия языка

  2. indicator() / str…

    Одно объявление типа

  3. input.*

    Настраиваемые параметры

  4. Вычисления и усло…

    Ряды, функции, переменные

  5. plot() или команд…

    Наблюдаемый результат

Карта показывает логический порядок чтения программы: от версии к типу и вычислениям. Это учебная структура, а не диаграмма памяти. На узком экране она прокручивается по горизонтали.

Источник схемы: авторское представление раздела Script structure.

Simple: одно значение

Series: значение на каждом баре

  1. 1.lengthInput: 3
  2. 2.close и smaValue
Параметр длины хранит одно значение, а close и результат SMA содержат отдельное значение для каждого бара. Схема показывает тип данных, а не шкалу цены. На узком экране она прокручивается по горизонтали.

Источник схемы: авторское объяснение различия простого значения и ряда по официальной модели выполнения Pine Script.

Как Pine Script выполняется по барам и что меняется в реальном времени

Представьте таблицу, где каждая строка - один бар. Pine Script последовательно получает данные строки, выполняет инструкции и сохраняет результат ряда для этого бара. На следующем баре доступны новые данные и, где это разрешено, прошлые значения через оператор истории, например close[1].

На исторических барах код обычно выполняется один раз на бар. Их open, high, low и close уже известны. На открытом realtime-баре ситуация другая: цена и максимум или минимум могут обновляться до закрытия. Индикатор снова выполняет расчёт на каждом обновлении, а перед новым проходом TradingView откатывает изменяемое состояние открытого бара к последнему подтверждённому состоянию. В документации этот механизм называется rollback.

Из этого следует практическое правило: значение, которое видно сейчас на незакрытой свече, может измениться или исчезнуть. После закрытия бара оно становится подтверждённым результатом этого бара. Это не обязательно ошибка или «перерисовка» в бытовом смысле. Сначала нужно определить, использует ли условие данные открытого бара и когда именно ожидается фиксация.

Учебная таблица показывает пятибарную историю и один открытый бар. В качестве примера берём SMA за три закрытия:

БарCloseSMA(3) после расчётаСостояние
1100нет данныхЗакрыт, не хватает трёх значений
2102нет данныхЗакрыт, не хватает трёх значений
3101101,00Закрыт и подтверждён
4105102,67Закрыт и подтверждён
5104103,33Закрыт и подтверждён
6106, затем 103105,00, затем 104,00Открыт, значение меняется

В шестой строке результат сначала равен (105 + 104 + 106) / 3 = 105, а после изменения текущего close на 103 становится (105 + 104 + 103) / 3 = 104. Ранее закрытые бары не меняются в этом примере. Числа синтетические и нужны только для проверки механики.

  1. Бар 1

    Close 100

    История, SMA ещё нет

  2. Бар 2

    Close 102

    История, SMA ещё нет

  3. Бар 3

    SMA 101,00

    Первое полное окно

  4. Бар 4

    SMA 102,67

    Закрытый результат

  5. Бар 5

    SMA 103,33

    Закрытый результат

  6. Бар 6

    105,00 -> 104,00

    Открытый бар обновился

Первые пять точек подтверждены. На шестом баре close меняется с 106 на 103, поэтому SMA(3) меняется с 105 на 104 до закрытия. Данные синтетические.

Источник схемы: авторский расчёт синтетического ряда по модели из Execution model и Bar states.

Чем отличаются индикатор, стратегия и библиотека

Индикатор объявляется через indicator(). Он может строить линии, метки, таблицы и другие визуальные элементы. Простой индикатор SMA не открывает реальную позицию: он рассчитывает ряд и отображает его на графике. На основе результата пользователь может формулировать отдельные правила наблюдения.

Стратегия объявляется через strategy(). В её коде появляются команды, которые создают гипотетические заявки. TradingView обрабатывает их эмулятором брокера и показывает отчёт. Это тест модели, а не подтверждение реального исполнения: комиссия, проскальзывание, заполнение заявок и настройки расчёта должны быть заданы и проверены отдельно.

Библиотека объявляется через library(). Она содержит функции, методы, пользовательские типы или перечисления, которые экспортируются для других Pine-скриптов. Библиотека полезна, если одна и та же проверенная логика нужна в нескольких программах. Сама по себе она не обязана рисовать линию или создавать заявку.

ТипГлавная задачаНаблюдаемый результатНе доказывает
ИндикаторРассчитать и показать данныеЛиния, метка, таблица, цветПрибыльность или необходимость входа
СтратегияСмоделировать формальные правилаГипотетические сделки и отчётРеальное исполнение у брокера
БиблиотекаПереиспользовать функции и типыИмпортируемый программный интерфейсКорректность скрипта, который её вызывает
Как выбрать тип Pine Script
Подойдёт, если
  • Индикатор: нужен расчёт и визуализация на графике
  • Стратегия: есть однозначные правила для симуляции
  • Библиотека: проверенную функцию используют несколько скриптов
Не подойдёт, если
  • Индикатор не подтверждает качество торгового решения
  • Стратегия не равна реальному исполнению заявки
  • Библиотека не скрывает ошибки вызывающего кода

Источник схемы: авторское сравнение официальных разделов Strategies и Libraries.

Минимальный пример Pine Script v6 и проверка результата

Откройте Pine Editor в TradingView, создайте новый пустой индикатор и вставьте код:

pine
//@version=6
indicator("SMA test", overlay = true)

lengthInput = input.int(3, "SMA length", minval = 1)
smaValue = ta.sma(close, lengthInput)

plot(smaValue, "SMA", color = color.orange, linewidth = 2)

Первая строка фиксирует Pine Script v6. indicator() объявляет индикатор и просит рисовать его поверх основного графика. input.int() создаёт параметр длины со значением 3 и запрещает длину меньше 1. ta.sma() рассчитывает простую скользящую среднюю по ряду закрытий. plot() выводит полученный ряд оранжевой линией.

После добавления на график проверьте результат по шагам:

  1. Убедитесь, что в редакторе нет ошибки компиляции и на графике появилась одна линия.
  2. Откройте настройки индикатора и проверьте, что SMA length равна 3.
  3. Выберите три соседних закрытых бара и выпишите их close из источника данных графика.
  4. Сложите три значения и разделите на 3. Сравните результат со значением линии на третьем баре с учётом точности цены.
  5. Перейдите на следующий закрытый бар: удалите из окна первое значение, добавьте новое и повторите расчёт.
  6. Отдельно наблюдайте открытый бар. Не записывайте его промежуточное значение как подтверждённое до закрытия.

Ограничения языка и безопасная работа рядом с Midas

Пределы Pine Script начинаются с контекста платформы. Скрипт видит доступные ему данные и выполняется по модели TradingView. Глубина истории, количество объектов, время расчёта и некоторые типы запросов ограничены. Конкретные лимиты могут меняться, поэтому их следует проверять в текущей официальной документации, а не переносить цифры из старого примера.

Второе ограничение - различие истории и realtime. Условие может выглядеть устойчивым на закрытых барах, но колебаться на открытом. Если в задаче важна подтверждённая метка, явно определите, должна ли она появляться только после закрытия. Если важна ранняя реакция, журналируйте все промежуточные состояния, а не только удачные.

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

Рядом с Midas действует простая граница. Invite-only индикатор можно использовать как продукт по предоставленному доступу и наблюдать разрешённый результат на графике. Нельзя пытаться достать, декомпилировать, копировать или воспроизводить защищённый исходный код. Для обучения пишите независимый скрипт от собственной формулировки задачи.

Дисклеймер. Материал носит образовательный характер и не является индивидуальной инвестиционной рекомендацией. Индикатор, скрипт или результат тестера не гарантирует будущий результат. Торговля связана с риском потери капитала.

Как продолжить обучение безопасно

Pine Script не является универсальным языком общего назначения. Его среда и модель данных настроены на расчёты внутри TradingView. Это упрощает доступ к open, high, low, close, объёму и времени, но одновременно задаёт ограничения платформы. Код работает с доступным графику набором данных, а поведение на открытом баре зависит от модели выполнения.

У языка строгая типизация, но новичку важнее начать с практического различия. Значение 3 - одно простое число. close - ряд, который меняется от бара к бару. ta.sma(close, 3) тоже ряд, потому что средняя рассчитывается заново по окну из трёх значений. Ошибка «ожидалось простое значение, получен ряд» обычно говорит не о математике, а о несовместимости типов и контекста использования.

Комментарии начинаются с //. Имена лучше делать содержательными: lengthInput объясняет роль параметра точнее, чем x, а smaValue отличает рассчитанную среднюю от исходного close. Это особенно важно, когда код проверяет другой человек.

Стратегии имеют дополнительную особенность. По умолчанию расчёт стратегии на realtime-баре может происходить только после его закрытия, если не включены другие настройки. Поэтому одинаковое условие в индикаторе и стратегии нельзя автоматически считать синхронным. Перед сравнением запишите тип программы, настройки расчёта и момент чтения результата.

Для первой задачи выбирайте минимальный тип. Если нужно понять формулу и увидеть линию, начните с индикатора. Переходите к стратегии только после того, как вход, выход, момент расчёта и издержки записаны без двусмысленности. Библиотеку выделяйте, когда повторение кода уже возникло, а интерфейс функции стабилен.

Если ручной результат не совпадает, проверьте не «качество TradingView», а точные условия сравнения: тот ли символ и таймфрейм открыт, совпадает ли тип цены, та ли длина указана, закрыт ли бар, хватает ли истории, одинакова ли точность отображения. Один зелёный статус компиляции не доказывает правильность выбранной формулы.

Минимальный пример намеренно не содержит алертов, заявок, запросов данных другого таймфрейма и сложной логики состояния. Это позволяет связать каждую строку с наблюдаемым результатом. Следующее изменение делайте по одному: сначала замените длину 3 на 5 и снова вручную проверьте окно, а не добавляйте несколько условий одновременно.

Безопасный учебный сценарий рядом с Midas:

  1. Сформулируйте наблюдаемое правило без ссылки на внутреннюю логику Midas, например «построить SMA(3) по close».
  2. Напишите минимальный независимый Pine Script и вручную проверьте значения.
  3. Сохраните исходную и изменённую версии. Запишите, что поменялось и на каких закрытых барах выполнена сверка.
  4. Если рядом видна метка Midas, фиксируйте только время, закрытие бара и публично наблюдаемый результат.
  5. Не утверждайте, что независимый код повторяет алгоритм Midas. Совпадение отдельных наблюдений не раскрывает причин и не доказывает эквивалентность.
  6. Используйте наблюдение как учебный журнал, а не как команду на сделку.

В Midas обучение и индикаторы работают рядом: сначала пользователь разбирает механику на воспроизводимом примере, затем учится читать сигналы продукта в контексте графика. Метка Midas - повод провести анализ, а не автоматическая команда войти в сделку. Такой порядок помогает отделить инструмент от собственного решения.

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

Источники

Частые вопросы

Что такое Pine Script простыми словами?

Это язык программирования внутри TradingView. С его помощью формальное правило превращают в расчёт по барам графика, визуальный индикатор, стратегию для симуляции или библиотеку функций. Код компилируется и выполняется платформой. Сам язык не выбирает полезную торговую идею и не гарантирует результат.

Нужно ли устанавливать Pine Script на компьютер?

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

Почему Pine Script выполняется на каждом баре?

Большинство значений в графике являются рядами: у каждого бара свой close и свой результат формулы. Поэтому программа проходит по набору данных последовательно. На истории расчёт обычно происходит один раз на бар, а индикатор на открытом realtime-баре может пересчитываться при каждом обновлении до подтверждения закрытием.

Чем indicator отличается от strategy?

indicator() предназначен прежде всего для расчёта и визуализации. strategy() добавляет команды гипотетических заявок и отчёт тестера, который обрабатывается эмулятором брокера. Отчёт стратегии не является реальным исполнением. Настройки комиссии, проскальзывания и момента расчёта проверяются отдельно.

Можно ли посмотреть исходный код любого индикатора TradingView?

Нет. У открытых публикаций код может быть доступен по решению автора, но invite-only и другие защищённые скрипты не дают права извлекать или копировать исходник. Для обучения пишите независимый код по собственной задаче и сравнивайте только разрешённые наблюдаемые результаты, не заявляя эквивалентность алгоритмов.

Материал был полезен?

Обсуждение

Тёма

плюсую, тоже долго путался в этом месте

Егор

по делу написано

Оставить комментарий

Профильный эксперт
Макс
Аналитик рынка

Разбирает структуру рынка: уровни, объёмы, сценарии движения цены и торговые сетапы — на криптовалюте, акциях, валютных парах и фьючерсах. В базе знаний ведёт технический анализ и разборы реальных графиков: что происходило на рынке и как это читалось по индикатору.

График TradingView с сигналами Buy и Sell индикатора Midas
Midas multi-индикатор for TradingViewОдин из самых продвинутых индикаторов для трейдинга
  • Сигналы без перерисовки
  • Интерактивный теханализ
  • 7 стратегий на выбор
Midas multi-индикатор for TradingViewСигнал, стоп и 3 цели — прямо на графике
  • Сигнал фиксируется по закрытию свечи
  • Стоп и 3 цели строятся автоматически
  • План сделки виден до входа