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

Базовый синтаксис: как читать и писать код
Pine Script создан с акцентом на простоту: даже если вы раньше не писали код на нём, освоить базовые конструкции можно за вечер. У каждого скрипта есть чёткая структура, и разобраться в ней — первый шаг к созданию собственного инструмента на TradingView.
Начинается скрипт с указания версии языка:
//@version=6
Это строка обязательна: она сообщает интерпретатору TradingView, какие правила синтаксиса использовать. Шестая версия — самая новая.
Далее идёт определение типа скрипта:
indicator()
— если вы хотите просто визуализировать данные (например, нарисовать скользящую среднюю, уровни, стрелки).strategy()
— если ваша цель — бэктест торговых решений с расчётом сделок, прибыли и убытков.
Чтобы скрипт был гибким, в него добавляют параметры через функцию input()
. Например:
lengthMA = input.int(20, title="Период скользящих средних")
Теперь пользователь может сам менять значение прямо из панели настроек на графике.

Рассмотрим базовый пример — аналог «Hello, World» в Pine Script:
// 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)
Этот пример 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. Эти уровни часто служат ориентирами для пробойных стратегий.

// Михаил Шардин, 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))
Ключевые функции:
isTime()
иisRangePeriod
определяют нужный временной интервал.rangeHigh
иrangeLow
обновляются только в рамках этого окна.plot()
визуализирует границы диапазона.table
показывает итоговые значения прямо на графике.
Вы можете адаптировать код под любые рынки и таймфреймы, изменив время.
Пример 2: Фундаментальный анализ
Pine Script позволяет не только анализировать технические индикаторы, но и загружать фундаментальные данные компаний прямо на график. Это открывает возможности для оценки бизнеса без переключения между платформами и сайтами. Один из таких примеров — анализ показателя Net Profit Margin (чистой рентабельности).

Что это за показатель?
Net Profit Margin (NPM) показывает, какой процент от выручки остаётся у компании после всех расходов — налогов, процентов, административных издержек и прочего. Если NPM выше 10%, это сигнализирует о финансовом здоровье бизнеса. Выше 15% — компания не просто эффективна, а конкурентоспособна даже в кризисные периоды.
Разбор кода:
//@version=6
indicator("Net Profit Margin: чистая рентабельность", overlay=false)
// Получение квартального значения чистой рентабельности
NPM_quarterly = request.financial(syminfo.tickerid, 'NET_MARGIN', 'FQ')
Функция request.financial()
позволяет подгрузить фундаментальные показатели. В данном случае мы берём NET_MARGIN
за последний финансовый квартал ('FQ'
).
// Цвет фона: зелёный — хорошая рентабельность, красный — слабая
bg_color = NPM_quarterly >= 10 ? color.new(color.green, 90) : color.new(color.red, 90)
bgcolor(bg_color, title="Фон рентабельности")
Здесь используется наглядная визуализация: фон графика окрашивается в зависимости от уровня рентабельности. Если маржа ≥ 10% — всё в порядке, если меньше — стоит быть осторожным.
// График и контрольные линии
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)
На графике рисуется линия с текущими значениями чистой маржи и добавлены два горизонтальных уровня — для отслеживания контрольных границ эффективности.
Коды полностью представлены на Гитхаб.
Зачем использовать это в реальной торговле?
Представьте, что вы выбираете между двумя акциями. Обе растут на графике, но только у одной стабильная чистая рентабельность выше 15%. Это даёт дополнительное подтверждение: бизнес не просто на подъёме, а действительно зарабатывает. Сильная маржа — защитный буфер в трудные времена.
В Pine Script такие оценки можно строить прямо на графике, комбинируя с техническим анализом. И это делает язык особенно ценным — он объединяет технику и фундаментал в одной среде, прямо как в книге Виктора Сперандео.
Где брать готовые скрипты?
Если не хочется писать с нуля, начните с изучения чужих наработок. На TradingView есть каталоги авторов, где можно найти десятки полезных скриптов. Мне нравятся два источника:
BigBeluga — популярные стратегии, часто с понятным описанием и открытым кодом.
PineCodersTASC — официальные скрипты по материалам Traders» Tips, публикуются каждый месяц.
Чтобы использовать скрипт, просто откройте его, нажмите «Добавить на график», а затем — «Скопировать и изменить», если хотите доработать под себя.
Если вам нужен совет по адаптации или написанию скрипта с нуля — напишите мне. Я не так давно начал изучать Pine Script, но уже получил позитивный опыт быстрого прототипирования стратегий под конкретные задачи.
Заключение
Pine Script — идеальный инструмент для быстрых экспериментов и визуализации торговых идей прямо на графиках TradingView. Он позволяет за 15 минут проверять гипотезы, недоступные стандартным индикаторам.
Не бойтесь начать! Попробуйте изменить примеры из статьи в Pine Editor и добавьте их на график — результат увидите сразу. Удачи!
Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»
15 апреля 2025 г.