La mia strategia ignora l'argomento 'from_entry' quando chiude posizioni

La funzione strategy.exit() ti permette di uscire da una posizione specifica usando il parametro from_entry.

Se la strategia prevede più entrate (piramidale), l'ordine con cui le posizioni vengono chiuse può apparire confusionario consultando la lista delle operazioni presente nel Tester strategia.

Di default, il primo ordine di uscita presente in una strategia chiude l'ordine di entrata più vecchio. Il secondo ordine chiude la seconda posizione più vecchia, e così via. Tale principio è conosciuto con la sigla FIFO (first in, first out).

Nel seguente esempio, proviamo ad utilizzare l'argomento from_entry per collegare l'utilizzo di strategy.exit ad entrate specifiche:

//@version=4
strategy("close_entries_rule_example", overlay=true, pyramiding = 2)
 
strategy.entry("EN2", strategy.short, when= bar_index == 20650)
strategy.entry("EN1", strategy.short, when= bar_index == 20652)
 
if bar_index == 20655
    strategy.exit(id = "EX1", from_entry = "EN1", profit = 1, loss = 1)

if bar_index == 20657
    strategy.exit(id = "EX2", from_entry = "EN2", profit = 1, loss = 1)

All'inizio, strategy.entry apre una posizione short EN2 in corrispondenza della barra con indice 20650. EN1 si verifica due barre dopo.

Quando bar_index è uguale a 20655, una funzione strategy.exit() con id = EX1 si occuperà di chiudere la posizione aperta EN1, mentre EX2 chiuderà EN2 dopo due barre.

Ciononostante, i risultati nel Tester strategia appariranno così:

La prima operazioone con identificativo EN2 viene chiusa dall'ordine EX1, mentre EN1 è chiusa da EX2, nonostante il codice preveda che EN2 sia chiusa da EX2 in corrispondenza della barra 20657. Si tratta del meccanismo descritto prima (FIFO) in azione, con le chiusure stabilite in ordine cronologico.

Per fare in modo che la strategia possa effettuare chiusure in qualsiasi ordine, l'argomento close_entries_rule della funzione strategy() dovrebbe essere impostato a "ANY" (invece del valore di default “FIFO”), es: 

//@version=4
strategy(..., close_entries_rule="ANY", ...)

Con queste impostazioni, la strategia fa riferimento alle posizioni specificate per determinare le uscite dal mercato. (N.B. "FIFO" è impostato in automatico come default anche quando l'argomento close_entries_rule non è specificato).


Con strategy() impostato nel modo seguente  

strategy("close_entries_rule_example", close_entries_rule="ANY",  overlay=true, pyramiding = 2)

i risultati del Tester saranno diversi:

In questo caso, il primo ordine di uscita (EX1) chiude la seconda entrata (EN1), mentre EX2 chiude EN2.