Стратегия в Pine Script: от сигнала до сделки

Обложка статьи «Стратегия в Pine Script: от сигнала до сделки»: Четыре свечи, золотые точки и короткие штрихи на ценах открытия второй и четвёртой: там исполняются заявки, созданные на закрытии предыдущих свечей

Из чего состоит стратегия Pine Script

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

ЧастьЧто в ней задаютЧто получается
ОбъявлениеНазвание, комиссию, порядок исполненияСкрипту доступны команды заявок
УсловиеСравнение цен или значений индикатора«Да» или «нет» на каждой свече
Команда заявкиВход или выход при условии «да»Заявка для эмулятора
Эмулятор брокераНичего, он встроен в платформуСделка по ценам графика

Так это выглядит в коде. Ниже учебная иллюстрация, а не готовая торговая система: мы её не запускали и на истории не проверяли.

//@version=6
strategy("Учебная стратегия")
longCondition = ta.crossover(close, ta.sma(close, 20))
exitCondition = ta.crossunder(close, ta.sma(close, 20))
if longCondition
    strategy.entry("Вход", strategy.long)
if exitCondition
    strategy.close("Вход")

Руководство TradingView описывает, как сделать стратегию из готового индикатора. Объявление indicator() меняют на strategy() и добавляют команды заявок, которые срабатывают по условиям индикатора. Как устроен сам язык, разобрано в руководстве Pine Script: что это за язык.

Как условие превращается в заявку на вход или выход

Условие само ничего не покупает и не продаёт. Когда оно истинно, команда создаёт заявку, а сделка появляется только после того, как эмулятор эту заявку исполнит. Руководство разводит два слова: заявка - это поручение эмулятору, сделка - результат исполненной заявки на вход.

Команд, которые создают заявки, в языке пять. Разберём три из них.

  • strategy.entry() создаёт заявку на вход. По умолчанию она рыночная: купить или продать как можно скорее, по какой бы цене это ни вышло.
  • strategy.close() создаёт рыночную заявку на выход. Эмулятор исполняет её на следующем доступном тике.
  • strategy.exit() создаёт выход, привязанный к цене. Так задают, например, стоп-лосс. Руководство предупреждает: цена исполнения не обязательно совпадёт с указанной.

Ещё одна деталь объясняет, почему повторный сигнал иногда «не срабатывает». По умолчанию strategy.entry() открывает новую позицию, но не добавляет к уже открытой в ту же сторону. За это отвечает параметр pyramiding.

Условия удобно выносить в отдельные расчёты, как в ответе Функции Pine Script: параметры, результат и вызов.

Когда эмулятор исполняет заявку: пример на четырёх свечах

По умолчанию заявка, созданная на закрытии свечи, исполняется на открытии следующей. Руководство объясняет это так: создать и исполнить заявку на одном тике было бы нереалистично.

Проверим на четырёх учебных свечах. Одна свеча здесь равна одному бару графика. Числа вымышленные: это ручной расчёт, а не запуск скрипта и не проверка на рыночной истории. Условия входа и выхода здесь абстрактные, не из листинга выше. Разрыв цен между свечами нарочно крупный, чтобы разницу было видно. Торгуем одной единицей без плеча, проскальзывания нет. Комиссия условная, 0,1% с каждой исполненной заявки, в листинге она не задана.

СвечаОткрытие и закрытиеЧто происходит
Первая99 и 100На закрытии условие входа истинно, создана заявка
Вторая103 и 104На открытии заявка исполнена: вход по 103
Третья104 и 106На закрытии условие выхода истинно, создана заявка
Четвёртая101 и 102На открытии заявка исполнена: выход по 101

Теперь расчёт по ценам исполнения.

  • Результат до комиссии. 101 - 103 = -2.
  • Комиссия. 0,1% от 103 равно 0,103, от 101 равно 0,101. Вместе 0,204.
  • Итог. -2 - 0,204 = -2,204.

Лёгкая ошибка - взять цены свечей, на которых появились сигналы: 106 - 100 = +6. На тех же четырёх свечах это другой знак результата.

Учебный пример: сигнал на закрытии, исполнение на открытии

учебная схема · не котировка и не сигнал

Сигнал и цена исполнения

Сигнал и цена исполнения1210334101
  1. 1Свеча закрылась на 100, условие входа истинно. Скрипт создаёт рыночную заявку, сделки ещё нет
  2. 2Заявка исполнена на открытии следующей свечи: вход по 103, а не по 100
  3. 3Свеча закрылась на 106, условие выхода истинно. Скрипт создаёт заявку на выход
  4. 4Заявка исполнена на открытии следующей свечи: выход по 101, а не по 106
Схема учебная, числа вымышленные. Четыре свечи: на первой и третьей условие становится истинным на закрытии, на второй и четвёртой эмулятор исполняет заявку по цене открытия. Под ними подписаны цены исполнения: 103 и 101.

Какие настройки меняют результат расчёта

Разберём четыре настройки из объявления strategy(), которые меняют результат: момент исполнения, комиссию, проскальзывание и расчёт на каждом тике. Есть и другие, например pyramiding из раздела выше. Отдельно стоит тип графика.

  • Момент исполнения. За него отвечает параметр process_orders_on_close, по умолчанию он выключен. Если его включить, эмулятор может исполнить заявку сразу, на закрытии той же свечи.
  • Комиссия. Если её не задать, стратегия считает сделки без комиссии. Задают её аргументами commission_type и commission_value.
  • Проскальзывание. Аргумент slippage задаёт его в тиках, то есть в минимальных шагах цены. По умолчанию он равен 0. Руководство признаёт: проскальзывание непредсказуемо, точно смоделировать его нельзя.
  • Расчёт на каждом тике. Параметр calc_on_every_tick по умолчанию выключен. Он управляет тем, как стратегия считается на свечах реального времени.
  • Тип графика. На нестандартных графиках, например Heikin Ashi или Renko, стратегия по умолчанию торгует по синтетическим ценам. Результат при этом не отражает реальные условия рынка. Руководство советует проверять стратегии на стандартных типах графика.

Покажем первую настройку на нашем примере. При исполнении на закрытии вход прошёл бы по 100, а выход по 106. Комиссия составила бы 0,1 + 0,106 = 0,206, а итог 6 - 0,206 = 5,794 вместо -2,204. Это не довод включать параметр: рынок тот же, изменилось только допущение о цене исполнения. В разделе вопросов руководства сказано, что исполнение на закрытии может давать неточный результат и вести к перерисовке. Так называют случай, когда расчёт на истории расходится с тем, что стратегия показывает в реальном времени.

Эмулятор - это модель. По умолчанию он исполняет заявки только по данным графика, а настоящий рынок может дать другую цену. Комиссия по ценным бумагам и биржам США (SEC) пишет о том же применительно к рыночной заявке на акции: цена исполнения может оказаться не той, которую вы ожидали.

Чем проверка стратегии на истории отличается от прогноза, читайте в ответе Бэктест торговой стратегии: что это и как проверить. Коротко о термине: бэктест.

Как читать результаты встроенного тестера TradingView?

Результаты встроенного тестера TradingView читают в таком порядке: сначала число закрытых сделок и период теста, потом просадка и издержки, и только после этого прибыль. Отчёт стратегии состоит из вкладок «Metrics» и «Trades»: в первой собраны итоговые показатели и график капитала, во второй - каждая смоделированная сделка с ценами входа и выхода. Итоговая прибыль без остальных строк отчёта мало о чём говорит: она зависит от комиссии, проскальзывания и момента исполнения, заданных в настройках.

Показатель в отчётеЧто значит по справке TradingViewНа что смотреть
Чистая прибыль (Net PnL)Накопленный реализованный результат за выбранный период: сумма по всем закрытым сделкамУчтена ли комиссия и на скольких сделках получен итог
Максимальная просадка (Max drawdown)Наибольшее падение капитала от достигнутого максимума; считается по барам с открытой позицией, с учётом цен внутри бараСопоставить с чистой прибылью и с начальным капиталом
Фактор прибыли (Profit factor)Сумма прибыльных сделок, делённая на сумму убыточных, по абсолютной величинеНиже 1 - убытки больше прибылей; значение чуть выше 1 легко пропадает после учёта издержек
Процент прибыльных (Percent profitable)Число прибыльных сделок, делённое на число закрытыхЧитать только вместе со средней прибылью и средним убытком
Всего сделок (Total trades)Количество открытых и затем закрытых позиций; открытые позиции и неисполненные заявки не входятЧем меньше сделок, тем сильнее итог зависит от одной-двух из них
Средняя сделка (Average PnL)Чистая прибыль, делённая на число закрытых сделокСравнить с комиссией и проскальзыванием на одну сделку
«Купил и держи» (Buy and hold PnL)Условный результат, если весь начальный капитал вложить в инструмент в момент первой сделки и держать до конца тестаОбгоняет ли стратегия простое удержание на том же участке
Уплаченная комиссия (Commission paid)Сумма всех комиссий за исполнение сделокНоль в этой строке значит, что комиссия в настройках не задана

Единых порогов «хорошо» и «плохо» для этих показателей в справке TradingView нет. Цифры из чужих обзоров - это ориентиры для проверки, а не норма.

Порядок чтения отчёта по шагам.

  1. Число сделок и период. Сначала строка «Всего сделок» и даты теста. По десятку сделок вывод ненадёжен, каким бы ни был итог.
  2. Просадка. Максимальную просадку сравнивают с чистой прибылью и начальным капиталом: она показывает, какое падение пришлось бы пережить по дороге к итогу.
  3. Комиссия и проскальзывание в настройках. Если комиссия не задана, стратегия считает сделки без неё, а проскальзывание по умолчанию равно 0. Отчёт с нулевыми издержками завышает результат.
  4. Список сделок. Во вкладке «Trades» проверяют цены исполнения и то, не держится ли вся прибыль на одной крупной сделке.
  5. Сравнение с «купил и держи». Если простое удержание инструмента дало больше, сигналы стратегии на этом участке ничего не добавили.
  6. Другой участок истории. Тест повторяют на другом периоде, инструменте или таймфрейме с теми же настройками. Результат, который держится только на одном отрезке, скорее всего подогнан под него.

Факт из первоисточника: в руководстве Pine Script сказано, что без заданной комиссии стратегия не применяет её к исполненным заявкам и что отчёт получается содержательнее, когда в него включены возможные реальные издержки. Там же описано допущение эмулятора о движении цены внутри бара: если открытие ближе к максимуму, чем к минимуму, цена считается прошедшей путь открытие - максимум - минимум - закрытие, иначе открытие - минимум - максимум - закрытие. Определения показателей взяты из справки TradingView, проверено 12.10.2026.

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

Тот же порядок подходит и для сигналов индикатора: за 7 дней демо Midas их можно сверить на своих графиках, считая результат по ценам исполнения, а не по ценам сигнала.

Риски и ограничения. Числа в примере и на схеме вымышленные. Это ручной расчёт, а не рыночные данные и не результат запуска скрипта. Код - учебная иллюстрация, а не торговая система. Если захотите разобрать его в редакторе, сначала убедитесь, что он компилируется. Расчёт сделан для одной единицы без плеча, на фьючерс его нельзя переносить без множителя контракта. Правила языка сверены 11.10.2026 и могут меняться. Стратегия на графике моделирует сделки, а не совершает их на счёте. Результат на истории не гарантирует прибыль и ничего не говорит о будущем. Сигнал стратегии - повод проанализировать график, а не приказ на вход. Рынок волатилен, торговля связана с риском потери капитала. Материал образовательный, это не индивидуальная инвестиционная рекомендация.

Источники

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

Как читать результаты встроенного тестера TradingView?

Результаты встроенного тестера TradingView читают по порядку: число закрытых сделок и период теста, максимальная просадка, комиссия и проскальзывание в настройках, список сделок, сравнение с «купил и держи». Чистую прибыль оценивают последней и только вместе с этими строками. Затем тест повторяют на другом участке истории с теми же настройками.

Что такое фактор прибыли в отчёте стратегии TradingView?

Фактор прибыли - это сумма прибыльных сделок, делённая на сумму убыточных, по абсолютной величине. По справке TradingView он показывает, сколько прибыли стратегия даёт на единицу убытка. Значение ниже 1 означает, что убытки больше прибылей; единого порога «хорошо» в справке нет.

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