Из чего состоит стратегия 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. На тех же четырёх свечах это другой знак результата.
Учебный пример: сигнал на закрытии, исполнение на открытии
учебная схема · не котировка и не сигнал
Сигнал и цена исполнения
- 1Свеча закрылась на 100, условие входа истинно. Скрипт создаёт рыночную заявку, сделки ещё нет
- 2Заявка исполнена на открытии следующей свечи: вход по 103, а не по 100
- 3Свеча закрылась на 106, условие выхода истинно. Скрипт создаёт заявку на выход
- 4Заявка исполнена на открытии следующей свечи: выход по 101, а не по 106
Какие настройки меняют результат расчёта
Разберём четыре настройки из объявления 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 нет. Цифры из чужих обзоров - это ориентиры для проверки, а не норма.
Порядок чтения отчёта по шагам.
- Число сделок и период. Сначала строка «Всего сделок» и даты теста. По десятку сделок вывод ненадёжен, каким бы ни был итог.
- Просадка. Максимальную просадку сравнивают с чистой прибылью и начальным капиталом: она показывает, какое падение пришлось бы пережить по дороге к итогу.
- Комиссия и проскальзывание в настройках. Если комиссия не задана, стратегия считает сделки без неё, а проскальзывание по умолчанию равно 0. Отчёт с нулевыми издержками завышает результат.
- Список сделок. Во вкладке «Trades» проверяют цены исполнения и то, не держится ли вся прибыль на одной крупной сделке.
- Сравнение с «купил и держи». Если простое удержание инструмента дало больше, сигналы стратегии на этом участке ничего не добавили.
- Другой участок истории. Тест повторяют на другом периоде, инструменте или таймфрейме с теми же настройками. Результат, который держится только на одном отрезке, скорее всего подогнан под него.
Факт из первоисточника: в руководстве Pine Script сказано, что без заданной комиссии стратегия не применяет её к исполненным заявкам и что отчёт получается содержательнее, когда в него включены возможные реальные издержки. Там же описано допущение эмулятора о движении цены внутри бара: если открытие ближе к максимуму, чем к минимуму, цена считается прошедшей путь открытие - максимум - минимум - закрытие, иначе открытие - минимум - максимум - закрытие. Определения показателей взяты из справки TradingView, проверено 12.10.2026.
Чего отчёт не показывает. Он описывает прошлое при заданных допущениях и ничего не говорит о будущих сделках. Параметры, подобранные под один участок истории, на другом участке часто дают другой результат. Перерисовку отчёт тоже не видит: расчёт на истории может расходиться с тем, что скрипт показывает в реальном времени.
Тот же порядок подходит и для сигналов индикатора: за 7 дней демо Midas их можно сверить на своих графиках, считая результат по ценам исполнения, а не по ценам сигнала.
Риски и ограничения. Числа в примере и на схеме вымышленные. Это ручной расчёт, а не рыночные данные и не результат запуска скрипта. Код - учебная иллюстрация, а не торговая система. Если захотите разобрать его в редакторе, сначала убедитесь, что он компилируется. Расчёт сделан для одной единицы без плеча, на фьючерс его нельзя переносить без множителя контракта. Правила языка сверены 11.10.2026 и могут меняться. Стратегия на графике моделирует сделки, а не совершает их на счёте. Результат на истории не гарантирует прибыль и ничего не говорит о будущем. Сигнал стратегии - повод проанализировать график, а не приказ на вход. Рынок волатилен, торговля связана с риском потери капитала. Материал образовательный, это не индивидуальная инвестиционная рекомендация.
Источники
- Strategies, руководство Pine Script v6 - объявление стратегии, команды заявок, эмулятор брокера, момент исполнения, комиссия, проскальзывание и типы графика.
- FAQ по стратегиям, руководство Pine Script v6 - переход от индикатора к стратегии, исполнение на следующей свече и перерисовка.
- Strategy report metrics, справка TradingView - определения показателей отчёта: чистая прибыль, просадка, фактор прибыли, процент прибыльных, число сделок, средняя сделка, «купил и держи», комиссия. Проверено 12.10.2026.
- Market Order, словарь Investor.gov (SEC) - определение рыночной заявки на акции и оговорка о цене исполнения.
Частые вопросы
Как читать результаты встроенного тестера TradingView?
Результаты встроенного тестера TradingView читают по порядку: число закрытых сделок и период теста, максимальная просадка, комиссия и проскальзывание в настройках, список сделок, сравнение с «купил и держи». Чистую прибыль оценивают последней и только вместе с этими строками. Затем тест повторяют на другом участке истории с теми же настройками.
Что такое фактор прибыли в отчёте стратегии TradingView?
Фактор прибыли - это сумма прибыльных сделок, делённая на сумму убыточных, по абсолютной величине. По справке TradingView он показывает, сколько прибыли стратегия даёт на единицу убытка. Значение ниже 1 означает, что убытки больше прибылей; единого порога «хорошо» в справке нет.





