Блог им. empenoso

Прокачай свой TradingView: введение в мир Pine Script

Pine Script — это язык программирования, разработанный командой TradingView как Domain Specific Language, то есть специализированный язык для решения конкретной задачи — анализа и визуализации финансовых данных. Он создан для тех, кто хочет строить собственные индикаторы, тестировать торговые стратегии и делать всё это прямо в интерфейсе графика — без установки Python, без импорта исторических котировок и без настройки среды разработки.

Pine Script предельно прост по синтаксису, но в то же время достаточно мощный, чтобы покрыть 95% потребностей розничного трейдера. В нём предусмотрены ключевые блоки: работа с таймсериями, доступ к фундаментальным данным, рисование на графике и даже поддержка таблиц.

Прокачай свой TradingView: введение в мир Pine Script

Базовый синтаксис: как читать и писать код

Pine Script создан с акцентом на простоту: даже если вы раньше не писали код на нём, освоить базовые конструкции можно за вечер. У каждого скрипта есть чёткая структура, и разобраться в ней — первый шаг к созданию собственного инструмента на TradingView.

Начинается скрипт с указания версии языка:

<code class="bash">//@version=6</code>

Это строка обязательна: она сообщает интерпретатору TradingView, какие правила синтаксиса использовать. Шестая версия — самая новая.

Далее идёт определение типа скрипта:

  • indicator() — если вы хотите просто визуализировать данные (например, нарисовать скользящую среднюю, уровни, стрелки).

  • strategy() — если ваша цель — бэктест торговых решений с расчётом сделок, прибыли и убытков.

Чтобы скрипт был гибким, в него добавляют параметры через функцию input(). Например:

<code class="javascript">lengthMA = input.int(20, title="Период скользящих средних")</code>

Теперь пользователь может сам менять значение прямо из панели настроек на графике.

Прокачай свой TradingView: введение в мир Pine Script

Рассмотрим базовый пример — аналог “Hello, World” в Pine Script:

<code class="javascript">// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Михаил Шардин, https://shardin.name/?utm_source=tradingview
// 12.04.2025

//@version=6
indicator("Пример скользящих средних", overlay=true)

// Входные параметры
lengthMA = input.int(20, title="Период скользящих средних")
src = input(close, title="Источник данных")

// 1. Простая скользящая средняя (SMA)
smaValue = ta.sma(src, lengthMA)
plot(smaValue, "SMA", color=color.blue, linewidth=2)

// 2. Экспоненциальная скользящая средняя (EMA)
emaValue = ta.ema(src, lengthMA)
plot(emaValue, "EMA", color=color.red, linewidth=2)

// 3. Взвешенная скользящая средняя (WMA)
wmaValue = ta.wma(src, lengthMA)
plot(wmaValue, "WMA", color=color.green, linewidth=2)

// 4. Сглаженная скользящая средняя (SMMA)
smmaValue = ta.rma(src, lengthMA)
plot(smmaValue, "SMMA", color=color.purple, linewidth=2)

// Отображение цены для сравнения
plot(close, "Цена", color=color.black, linewidth=1)

// Легенда для отображения текущих значений
var table legendTable = table.new(position.top_right, 1, 6)
if barstate.islast
  table.cell(legendTable, 0, 0, "Тип MA", bgcolor=color.gray)
  table.cell(legendTable, 0, 1, "SMA: " + str.tostring(smaValue, format.mintick), bgcolor=color.blue)
  table.cell(legendTable, 0, 2, "EMA: " + str.tostring(emaValue, format.mintick), bgcolor=color.red)
  table.cell(legendTable, 0, 3, "WMA: " + str.tostring(wmaValue, format.mintick), bgcolor=color.green)
  table.cell(legendTable, 0, 4, "SMMA: " + str.tostring(smmaValue, format.mintick), bgcolor=color.purple)
</code>

Этот пример Pine Script демонстрирует сразу четыре типа скользящих средних (MA) и сравнивает их между собой на графике. Скрипт устанавливает параметры:

lengthMA: пользователь может выбрать период скользящих средних (по умолчанию 20).
src: выбор источника данных (по умолчанию цена закрытия close).

Рассчитывает и отображает четыре типа MA
— SMA (Simple Moving Average) — простая скользящая, синяя линия.
— EMA (Exponential Moving Average) — экспоненциальная, красная линия.
— WMA (Weighted Moving Average) — взвешенная, зелёная линия.
— SMMA (Smoothed Moving Average) — сглаженная, фиолетовая линия.

Все линии накладываются поверх графика цены благодаря overlay=true.

Практические примеры

Пример 1: Индикатор для внутридневной торговли

Этот мой скрипт под названием Morning Rage Indicator предназначен для анализа первых часов торговой сессии. В нём задаётся утренний ценовой диапазон на 15-минутном таймфрейме и отображают уровни High и Low в заданный период — по умолчанию с 8:45 до 10:45. Эти уровни часто служат ориентирами для пробойных стратегий.

Прокачай свой TradingView: введение в мир Pine Script

<code class="javascript">// Михаил Шардин, https://shardin.name/?utm_source=tradingview
// 21.03.2025

//@version=6
indicator("Morning Rage Indicator", overlay=true)

// Параметры временных диапазонов
rangeStartHour = input.int(8, "Начало диапазона - час")
rangeStartMinute = input.int(45, "Начало диапазона - минута")
rangeEndHour = input.int(10, "Конец диапазона - час")
rangeEndMinute = input.int(45, "Конец диапазона - минута")

// Источники данных для расчета High/Low диапазона
rangeHighSource = input.source(high, "Источник для Range High")
rangeLowSource = input.source(low, "Источник для Range Low")

// Проверка нового дня
isNewDay = year != year[1] or month != month[1] or dayofmonth != dayofmonth[1]

// Функция для проверки времени
isTime(h, m) =>
  hour == h and minute == m

// Определение периода формирования диапазона
isRangePeriod = (hour > rangeStartHour or (hour == rangeStartHour and minute >= rangeStartMinute)) and (hour < rangeEndHour or (hour == rangeEndHour and minute <= rangeEndMinute))

// Расчет максимума и минимума диапазона
var float rangeHigh = 0.0
var float rangeLow = 10e10
var bool rangeCalculated = false

// Сброс диапазона в начале нового дня
if isNewDay
  rangeHigh := rangeHighSource
  rangeLow := rangeLowSource
  rangeCalculated := false

// Обновление диапазона только в указанный период
if isRangePeriod and not rangeCalculated
  rangeHigh := math.max(rangeHigh, rangeHighSource)
  rangeLow := math.min(rangeLow, rangeLowSource)
  
  // Помечаем диапазон как рассчитанный после окончания периода
  if hour == rangeEndHour and minute == rangeEndMinute
      rangeCalculated := true

// Получаем цену закрытия в момент окончания диапазона
var float rangeClose = na
if hour == rangeEndHour and minute == rangeEndMinute
  rangeClose := close

// Визуализация на графике
bgcolor(isRangePeriod and not rangeCalculated ? color.new(color.blue, 90) : na)

// Рисуем уровни диапазона
plot(rangeCalculated ? rangeHigh : na, "Range High", color.green, 2, plot.style_circles)
plot(rangeCalculated ? rangeLow : na, "Range Low", color.red, 2, plot.style_circles)

// Выводим метки с информацией
var table infoTable = table.new(position.top_right, 1, 1)
if barstate.islast
  table.cell(infoTable, 0, 0, "Range High: " + str.tostring(rangeHigh) + 
             "\nRange Low: " + str.tostring(rangeLow), 
             bgcolor=color.new(color.gray, 80))</code>

Ключевые функции:

  • isTime() и isRangePeriod определяют нужный временной интервал.

  • rangeHigh и rangeLow обновляются только в рамках этого окна.

  • plot() визуализирует границы диапазона.

  • table показывает итоговые значения прямо на графике.

Вы можете адаптировать код под любые рынки и таймфреймы, изменив время.

Пример 2: Фундаментальный анализ

Pine Script позволяет не только анализировать технические индикаторы, но и загружать фундаментальные данные компаний прямо на график. Это открывает возможности для оценки бизнеса без переключения между платформами и сайтами. Один из таких примеров — анализ показателя Net Profit Margin (чистой рентабельности).

Прокачай свой TradingView: введение в мир Pine Script

Что это за показатель?
Net Profit Margin (NPM) показывает, какой процент от выручки остаётся у компании после всех расходов — налогов, процентов, административных издержек и прочего. Если NPM выше 10%, это сигнализирует о финансовом здоровье бизнеса. Выше 15% — компания не просто эффективна, а конкурентоспособна даже в кризисные периоды.

Фундаментальный анализ акций в РФ и США

Разбор кода:

<code class="javascript">//@version=6
indicator("Net Profit Margin: чистая рентабельность", overlay=false)
// Получение квартального значения чистой рентабельности
NPM_quarterly = request.financial(syminfo.tickerid, 'NET_MARGIN', 'FQ')</code>

Функция request.financial() позволяет подгрузить фундаментальные показатели. В данном случае мы берём NET_MARGIN за последний финансовый квартал ('FQ').

<code class="javascript">// Цвет фона: зелёный — хорошая рентабельность, красный — слабая
bg_color = NPM_quarterly >= 10 ? color.new(color.green, 90) : color.new(color.red, 90)
bgcolor(bg_color, title="Фон рентабельности")
</code>

Здесь используется наглядная визуализация: фон графика окрашивается в зависимости от уровня рентабельности. Если маржа ≥ 10% — всё в порядке, если меньше — стоит быть осторожным.

<code class="javascript">// График и контрольные линии
plot(NPM_quarterly, title="Net Profit Margin", color=color.yellow, linewidth=2)
hline(10, "10% уровень", color=color.silver, linestyle=hline.style_dotted)
hline(15, "15% уровень", color=color.silver, linestyle=hline.style_dotted)</code>

На графике рисуется линия с текущими значениями чистой маржи и добавлены два горизонтальных уровня — для отслеживания контрольных границ эффективности.

Коды полностью представлены на Гитхаб.

Зачем использовать это в реальной торговле?
Представьте, что вы выбираете между двумя акциями. Обе растут на графике, но только у одной стабильная чистая рентабельность выше 15%. Это даёт дополнительное подтверждение: бизнес не просто на подъёме, а действительно зарабатывает. Сильная маржа — защитный буфер в трудные времена.

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

Где брать готовые скрипты?

Если не хочется писать с нуля, начните с изучения чужих наработок. На TradingView есть каталоги авторов, где можно найти десятки полезных скриптов. Мне нравятся два источника:

  • BigBeluga — популярные стратегии, часто с понятным описанием и открытым кодом.

  • PineCodersTASC — официальные скрипты по материалам Traders’ Tips, публикуются каждый месяц.

Чтобы использовать скрипт, просто откройте его, нажмите «Добавить на график», а затем — «Скопировать и изменить», если хотите доработать под себя.

Если вам нужен совет по адаптации или написанию скрипта с нуля — напишите мне. Я не так давно начал изучать Pine Script, но уже получил позитивный опыт быстрого прототипирования стратегий под конкретные задачи.

Заключение

Pine Script – идеальный инструмент для быстрых экспериментов и визуализации торговых идей прямо на графиках TradingView. Он позволяет за 15 минут проверять гипотезы, недоступные стандартным индикаторам.

Не бойтесь начать! Попробуйте изменить примеры из статьи в Pine Editor и добавьте их на график – результат увидите сразу. Удачи!

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

15 апреля 2025 г.

★24
1 комментарий
Потом заходишь в настройки индикатора, меняешь стандартное значение на другое и пытаешься найти закономерность.

теги блога Михаил Шардин

....все тэги



UPDONW
Новый дизайн