Стратегия на графике не создает заявки

Если на вкладках "Список сделок" и "Обзор"  тестера стратегий отображается "Нет данных" после того как вы добавили стратегию на чарт, скорее всего это происходит потому что стратегия не сгенерировала никаких сделок, из-за чего результаты в данных вкладках отсутствуют.  Если ваш скрипт не создал никаких сделок, это может происходить в результате следующих причин:

Скрипт не обозначен как стратегия или не имеет команд на создание сделок 

Бектестинг в Тестере стратегий работает только со стратегиями Pine Script™, которые используют функцию `strategy()` в качестве декларации. Скрипты с декларациями `indicator()` или `library()` не могут взаимодействовать с модулем тестера стратегий.

Скрипты декларированные как стратегии, должны использовать команды для размещения ордеров `strategy.*`  (т.е. функции `strategy.order()` или `strategy.entry()`) для симуляции сделок и отображения данных во вкладке тестера стратегий,  независимо от других сигналов на покупку/продажу которые включены в код скрипта.

Стратегия имеет недостаточное количество капитала для открытия позиции

Для открытия позиции стратегией, она должна иметь достаточно денег для покупки указанного количества контрактов/акций/лотов. Она не сможет осуществить сделку, если не имеет достаточно капитала для покрытия её стоимости. Например, если стартовый капитал стратегии равен 1000 USD и размер ордера 1 контракт, она не сможет войти в позицию, пока цена не опустится ниже 1000 USD, т.к. не может позволить себе осуществить сделку. Стратегии всегда пытаются приобрести заданное количество контрактов/акций/лотов и не меньше.

Важное замечание про бектестинг на фьючерсах:  

Символы фьючерсов имеют контрактную единицу (представленную как "значение пункта" в "информации по инструменту" на TradingView и доступная в Pine через переменную  `syminfo.pointvalue`). Как и другие символы, исходная цена на графике представляет собой цену одной единицы торгуемого инструмента. Однако фьючерсные контракты имеют установленное количество, которое представляет каждая единица, поэтому покупка одной единицы обычно невозможна. Чтобы рассчитать капитал, необходимый для контракта, умножьте цену графика на значение пункта. 

Для демонстрации влияния значения пункта на стратегии, которые используются на фьючерсах, рассмотрим символ CME_MINI:ES1!, который представляет собой фьючерс ES с лучшей ликвидностью и имеет значение пункта (Point Value) равное 50:

В примере ниже стратегия была добавлена на чарт и открыла позицию с ценой 4000 USD и вышла из позиции по цене 4500 USD. Фактическое количество средств потраченных на контракт по цене входа было равно 4000 USD умноженное на значение пункта равное 50, что составляет 200,000 USD.  Когда стратегия закрыла позицию по цене выхода, полученная стоимость равна 4500 USD * 50 = 225,000 USD, с результирующим профитом в 25,000 USD, что подтверждается при просмотре колонки "Profit" списка сделок во вкладке тестера стратегий:

В случае если бы начальный капитал стратегии был ниже чем  200,000 USD, то стратегия не смогла бы разместить сделку, так была бы не в состоянии позволить себе цену входа, которая была в 50 раз больше, чем цена отображаемая на графике. Чтобы войти в позицию, мы должны увеличить начальный капитал или уменьшить значения маржи для длинной или короткой позиции.

Стратегия возвращает ошибку времени выполнения

Если стратегия сталкивается с проблемой во время расчетов, она возвращает ошибку времени выполнения и отображает красный восклицательный знак в верхнем левом углу панели индикатора, содержащей стратегию. Ошибки выполнения останавливают выполнение расчетов, поэтому стратегия не может осуществлять сделки. Различные ошибки времени выполнения в Pine имеют разные причины и возможные исправления. Нажатие на восклицательный знак показывает текст ошибки.

Условия необходимые для размещения ордеров не были удовлетворены 

 

Одна из возможных причин почему стратегия не отображает данные, в том, что условия, которые активируют сделку не были осуществлены за всю историю бектестинга.  В данном случае не будет открытых позиций на графике, так как не было заявок для их заполнения. Пользователь может исправить это с помощью изменения условий в исходном коде стратегии. Часто бывает полезно визуально определить выполнение условий (сигналов) на создание ордеров с помощью вывода их на графике.

Нижеприведенный скрипт использует функцию `plotshape()` для вывода синих и красных крестиков над барами в момент наступления длинных и коротких сигналов, что позволяет просматривать их на графике:

//@version=5
strategy('My Strategy', overlay = true)

longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))

if longCondition
    strategy.entry('Long', strategy.long)

plotshape(longCondition, color=color.new(color.blue, 0))

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))

if shortCondition
    strategy.entry('Short', strategy.short)

plotshape(shortCondition, color=color.new(color.red, 0))

Для дополнительной информации по теме смотрите раздел User Manual's page on Debugging.

Настройки стратегии некорректны

Каждая стратегия имеет ряд параметров, которые покрывают правила для открытия сделок. Авторы могут установить данные параметры в исходном коде стратегии, а пользователи могут изменить их во вкладке "Properties" настроек стратегии.

ПРИМЕЧАНИЕ: Существует несколько способов задания количества контрактов/акций/лотов для ордеров в исходном коде стратегии:

  • Параметры функции `strategy()` позволяют авторам указать количество контрактов и их тип по умолчанию, что будет соответствовать значениям опций во вкладке "Properties" по умолчанию. Пользователи могут заменить эти значения изменяя значение "Order size".
  • Команды на размещение ордеров, которые вызывают открытие позиций, такие как `strategy.entry()`, могут устанавливать количество контрактов для каждого отдельного ордера. В этом случае изменения в значении во вкладке "Properties" не повлияют на размер сделки стратегии. 

Пользователи должны убедиться, что они указывают корректное количество контрактов для своей стратегии. Дополняя секцию "Стратегия имеет недостаточное количество капитала для открытия позиции" выше, отметьте, что:

  • Если значение "Order type" установлен в "Contracts" (соответствует аргументу `strategy.fixed` параметра default_qty_type в исходном коде скрипта), количество контрактов должно быть больше 1 для большинства символов. Некоторые криптовалюты используют дробные размеры контрактов. Например, количество контрактов равное 0.1 корректно для символа BTCUSD, но не для AAPL или EURUSD.
  • Размер контрактов должен быть положительным числом; отрицательное число вызовет ошибку времени выполнения, а значение равное нулю будет проигнорировано.
  • Суммарный размер позиции (число контрактов) не может превышать 1e12. Стратегия не сможет эмулировать новые сделки если текущий размер позиции превышает это число.