Что такое Pine Script и какие задачи он решает в TradingView
Pine Script встроен в TradingView. Пользователь открывает Pine Editor, пишет текст программы, сохраняет его и добавляет результат на график. Платформа компилирует исходный текст, получает программу и запускает её на доступном наборе баров. Отдельный локальный компилятор для первого знакомства не нужен.
В TradingView Pine Script получает готовые ряды графика, поэтому первая проверка может быть небольшой: одна формула, один параметр и одна линия.
Обычно язык используют для четырёх задач:
- Рассчитать ряд, например скользящую среднюю, диапазон или пользовательский осциллятор.
- Нарисовать линию, метку, цвет фона или другой результат рядом с ценой.
- Описать правила стратегии и получить симуляцию гипотетических заявок в тестере.
- Вынести повторно используемые функции и пользовательские типы в библиотеку.
Ключевое слово здесь - правило. Скрипт не понимает расплывчатую идею вроде «покажи сильное движение». Ему нужны наблюдаемые условия: какие данные взять, за какой период считать, что сравнить и что вывести. Чем точнее правило, тем легче проверить код на нескольких барах вручную.
|
Источник схемы: авторское резюме официальных разделов First steps и Execution model. Схема не изображает интерфейс или закрытую инфраструктуру TradingView.
Из чего состоит скрипт: версия, объявление и основной код
В официальной структуре Pine Script есть три части. Первая - аннотация версии вида //@version=6. Она сообщает компилятору, с какой версией языка написан код. Если аннотацию пропустить, поведение может соответствовать старой версии, поэтому в новом учебном примере версию лучше указывать явно.
Вторая часть - объявление. В скрипте используется одна из функций: indicator(), strategy() или library(). Она определяет тип программы и доступные возможности. У индикатора можно задать имя и параметр overlay, у стратегии - свойства моделирования, у библиотеки - описание набора экспортируемых сущностей.
Третья часть - основной код. Здесь объявляются входы, переменные, вычисления, условия и вызовы визуализации. В Pine Script значение часто является не одним числом, а рядом: у каждого бара своя цена закрытия и свой результат расчёта. Выражение ta.sma(close, 3) поэтому создаёт последовательность средних, а не одну постоянную величину.
Сначала полезно читать скрипт сверху вниз как паспорт:
- какая версия языка заявлена;
- какой тип программы объявлен;
- какие параметры может менять пользователь;
- из каких исходных рядов строится расчёт;
- какой результат выводится или моделируется.
|
Источник схемы: авторское представление раздела Script structure.
Simple: одно значение Series: значение на каждом баре
|
Источник схемы: авторское объяснение различия простого значения и ряда по официальной модели выполнения Pine Script.
Как Pine Script выполняется по барам и что меняется в реальном времени
Представьте таблицу, где каждая строка - один бар. Pine Script последовательно получает данные строки, выполняет инструкции и сохраняет результат ряда для этого бара. На следующем баре доступны новые данные и, где это разрешено, прошлые значения через оператор истории, например close[1].
На исторических барах код обычно выполняется один раз на бар. Их open, high, low и close уже известны. На открытом realtime-баре ситуация другая: цена и максимум или минимум могут обновляться до закрытия. Индикатор снова выполняет расчёт на каждом обновлении, а перед новым проходом TradingView откатывает изменяемое состояние открытого бара к последнему подтверждённому состоянию. В документации этот механизм называется rollback.
Из этого следует практическое правило: значение, которое видно сейчас на незакрытой свече, может измениться или исчезнуть. После закрытия бара оно становится подтверждённым результатом этого бара. Это не обязательно ошибка или «перерисовка» в бытовом смысле. Сначала нужно определить, использует ли условие данные открытого бара и когда именно ожидается фиксация.
Учебная таблица показывает пятибарную историю и один открытый бар. В качестве примера берём SMA за три закрытия:
| Бар | Close | SMA(3) после расчёта | Состояние |
|---|---|---|---|
| 1 | 100 | нет данных | Закрыт, не хватает трёх значений |
| 2 | 102 | нет данных | Закрыт, не хватает трёх значений |
| 3 | 101 | 101,00 | Закрыт и подтверждён |
| 4 | 105 | 102,67 | Закрыт и подтверждён |
| 5 | 104 | 103,33 | Закрыт и подтверждён |
| 6 | 106, затем 103 | 105,00, затем 104,00 | Открыт, значение меняется |
В шестой строке результат сначала равен (105 + 104 + 106) / 3 = 105, а после изменения текущего close на 103 становится (105 + 104 + 103) / 3 = 104. Ранее закрытые бары не меняются в этом примере. Числа синтетические и нужны только для проверки механики.
|
Источник схемы: авторский расчёт синтетического ряда по модели из Execution model и Bar states.
Чем отличаются индикатор, стратегия и библиотека
Индикатор объявляется через indicator(). Он может строить линии, метки, таблицы и другие визуальные элементы. Простой индикатор SMA не открывает реальную позицию: он рассчитывает ряд и отображает его на графике. На основе результата пользователь может формулировать отдельные правила наблюдения.
Стратегия объявляется через strategy(). В её коде появляются команды, которые создают гипотетические заявки. TradingView обрабатывает их эмулятором брокера и показывает отчёт. Это тест модели, а не подтверждение реального исполнения: комиссия, проскальзывание, заполнение заявок и настройки расчёта должны быть заданы и проверены отдельно.
Библиотека объявляется через library(). Она содержит функции, методы, пользовательские типы или перечисления, которые экспортируются для других Pine-скриптов. Библиотека полезна, если одна и та же проверенная логика нужна в нескольких программах. Сама по себе она не обязана рисовать линию или создавать заявку.
| Тип | Главная задача | Наблюдаемый результат | Не доказывает |
|---|---|---|---|
| Индикатор | Рассчитать и показать данные | Линия, метка, таблица, цвет | Прибыльность или необходимость входа |
| Стратегия | Смоделировать формальные правила | Гипотетические сделки и отчёт | Реальное исполнение у брокера |
| Библиотека | Переиспользовать функции и типы | Импортируемый программный интерфейс | Корректность скрипта, который её вызывает |
Как выбрать тип Pine Script Подойдёт, если
Не подойдёт, если
|
Источник схемы: авторское сравнение официальных разделов Strategies и Libraries.
Минимальный пример Pine Script v6 и проверка результата
Откройте Pine Editor в TradingView, создайте новый пустой индикатор и вставьте код:
//@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() выводит полученный ряд оранжевой линией.
После добавления на график проверьте результат по шагам:
- Убедитесь, что в редакторе нет ошибки компиляции и на графике появилась одна линия.
- Откройте настройки индикатора и проверьте, что
SMA lengthравна 3. - Выберите три соседних закрытых бара и выпишите их close из источника данных графика.
- Сложите три значения и разделите на 3. Сравните результат со значением линии на третьем баре с учётом точности цены.
- Перейдите на следующий закрытый бар: удалите из окна первое значение, добавьте новое и повторите расчёт.
- Отдельно наблюдайте открытый бар. Не записывайте его промежуточное значение как подтверждённое до закрытия.
Ограничения языка и безопасная работа рядом с 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:
- Сформулируйте наблюдаемое правило без ссылки на внутреннюю логику Midas, например «построить SMA(3) по close».
- Напишите минимальный независимый Pine Script и вручную проверьте значения.
- Сохраните исходную и изменённую версии. Запишите, что поменялось и на каких закрытых барах выполнена сверка.
- Если рядом видна метка Midas, фиксируйте только время, закрытие бара и публично наблюдаемый результат.
- Не утверждайте, что независимый код повторяет алгоритм Midas. Совпадение отдельных наблюдений не раскрывает причин и не доказывает эквивалентность.
- Используйте наблюдение как учебный журнал, а не как команду на сделку.
В Midas обучение и индикаторы работают рядом: сначала пользователь разбирает механику на воспроизводимом примере, затем учится читать сигналы продукта в контексте графика. Метка Midas - повод провести анализ, а не автоматическая команда войти в сделку. Такой порядок помогает отделить инструмент от собственного решения.
Полезно начать с раздела о торговых стратегиях, затем сверить роль индикаторов для трейдинга и отдельно разобрать скользящую среднюю. Подборка индикаторов TradingView поможет увидеть, какие задачи решаются визуально без попытки копировать чужой код.
Источники
-
- TradingView Pine Script: First steps - редактор, компиляция и первый индикатор, документация v6.
-
- TradingView Pine Script: Script structure - версия, объявление и основной код.
-
- TradingView Pine Script: Execution model - исторические и realtime-бары, rollback и подтверждение.
-
- TradingView Pine Script: Bar states - состояния баров и признаки подтверждения.
-
- TradingView Pine Script: Strategies - эмулятор брокера и особенности расчёта стратегий.
-
- TradingView Pine Script: Libraries - объявление, экспорт и повторное использование библиотек.
Частые вопросы
Что такое Pine Script простыми словами?
Это язык программирования внутри TradingView. С его помощью формальное правило превращают в расчёт по барам графика, визуальный индикатор, стратегию для симуляции или библиотеку функций. Код компилируется и выполняется платформой. Сам язык не выбирает полезную торговую идею и не гарантирует результат.
Нужно ли устанавливать Pine Script на компьютер?
Для базовой работы нет. Код пишется в Pine Editor внутри TradingView, там же компилируется и добавляется на график. Сохранение, публикация и доступ к возможностям зависят от аккаунта и текущих правил платформы. Локальный текстовый редактор можно использовать для черновика, но исполняет Pine Script среда TradingView.
Почему Pine Script выполняется на каждом баре?
Большинство значений в графике являются рядами: у каждого бара свой close и свой результат формулы. Поэтому программа проходит по набору данных последовательно. На истории расчёт обычно происходит один раз на бар, а индикатор на открытом realtime-баре может пересчитываться при каждом обновлении до подтверждения закрытием.
Чем indicator отличается от strategy?
indicator() предназначен прежде всего для расчёта и визуализации. strategy() добавляет команды гипотетических заявок и отчёт тестера, который обрабатывается эмулятором брокера. Отчёт стратегии не является реальным исполнением. Настройки комиссии, проскальзывания и момента расчёта проверяются отдельно.
Можно ли посмотреть исходный код любого индикатора TradingView?
Нет. У открытых публикаций код может быть доступен по решению автора, но invite-only и другие защищённые скрипты не дают права извлекать или копировать исходник. Для обучения пишите независимый код по собственной задаче и сравнивайте только разрешённые наблюдаемые результаты, не заявляя эквивалентность алгоритмов.










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