Моя стратегия обрабатывает заказы на одну свечу позже, чем задано в условии

 

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

Данное поведение можно изменить с помощью аргумента process_orders_on_close. Его использование позволяет стратегии исполнять заказы при закрытии бара. Для этого необходимо добавить аргумент process_orders_on_close в объявление функции strategy() и установить его значение на true, т.е.:

//@version=4 
strategy(..., process_orders_on_close=true, ...)

Вот как работает стратегия без аргумента process_orders_on_close:

//@version=4
strategy("process_orders_on_close example")
strategy.entry("EN", strategy.long, when = bar_index == 20650)
strategy.close("EN", when = bar_index == 20655)

Вот как работает стратегия с аргументом process_orders_on_close:

//@version=4
strategy("process_orders_on_close example", process_orders_on_close = true)
strategy.entry("EN", strategy.long, when = bar_index == 20650)
strategy.close("EN", when = bar_index == 20655)


Вход в позицию EN привязан к условию, выполняемому, когда стратегия рассчитывается на 20650 баре, но фактический вход в позицию происходит только на следующем баре (на баре 20651). То же самое происходит с закрытием данной позиции: условие истинно на баре 20655, но позиция EN закрывается только на 20656-м. 

При добавлении аргумента process_orders_on_close со значением true, стратегия теперь может входить в позиции при закрытии баров, следовательно вход EN теперь расположен на том же баре, где выполняется условие, указанное в strategy.entry.