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