La mia strategia esegue gli ordini una candela dopo che la condizione è stata realizzata

Di default, una strategia esegue i suoi calcoli una volta per barra, alla sua chiusura. Durante tali calcoli, la strategia può generare nuovi ordini o aggiornare quelli esistenti. Tuttavia, se consideriamo che la barra corrente è chiusa, significa che non si possono più fare operazioni in sua corrispondenza. Pertanto, il primo momento disponibile per l'esecuzione dell'ordine sarà durante l'apertura della barra successiva. Per questo motivo, le operazioni saranno sempre effettuate una barra dopo rispetto alla realizzazione della condizione di entrata.

Tale comportamento può essere cambiato con l'argomento process_orders_on_close, che permette di eseguire l'ordine in corrispondenza della chiusura della barra. Per attivarlo basta impostarlo su true durante la dichiarazione della funzione strategy(), come mostrato qui sotto:

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

Un esempio di strategia senza l'argomento 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)

Un esempio di strategia con l'argomento 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)


L'entrata EN è legata ad una condizione che si realizza in corrispondenza della candela 20650, ma l'esecuzione dell'ordine avviene durante la candela successiva (20651). Lo stesso accade con l'uscita: la condizione si verifica durante la candela 20655, ma l'ordine è eseguito nella candela seguente. Impostando l'argomento process_orders_on_close su true, la strategia può eseguire gli ordini alla chiusura delle candele in cui si sono verificate le condizioni, ovvero un'unità prima.