Due errori, trovati! In realtà era uno solo, l’altro era semplicemente legato al prezzo di entrata che essendo di tipo stop, lo faceva in apertura quale primo prezzo disponibile. E quel prezzo non mi tornava.
Comunque, sperando che ci sia qualcuno interessato, scrivo qui di cosa si trattava. Potrebbe tornare utile a chi, come me e tanti altri qui dentro, cerca di capire e sviscerare il linguaggio.
Allora, riferendomi al codice pubblicato al post #156304, le righe 8,9 e 10 individuano le barre che costituiscono il pattern long e quello short. Le righe da 16 a 21 verificano la sussistenza delle condizioni di presenza del pattern short e intervallo orario operativo e, in caso affermativo, calcolano il prezzo di entrata, il rischio dove posizionare lo stoploss ed il target price. Viene inoltre posta a -1 la variabile Setup.
Le righe da 23 a 28 verificano la sussistenza delle condizioni di presenza del pattern long e intervallo orario operativo e, in caso affermativo, calcolano il prezzo di entrata, il rischio dove posizionare lo stoploss ed il target price. Viene inoltre posta a +1 la variabile Setup.
Ora, nel caso non si sia a mercato e sia pari a -1 la variabile Setup, le righe 30,31 e 32 dispongono l’ordine di vendita al prezzo di entrata prima calcolato in modalità stop. In modo analogo, le righe 34, 35 e 36 nel caso di disposizione di ordine di acquisto.
Ora, vediamo cosa succede.
Il 3/12/2020 alle 12:48 c’è un ingresso short a 13255,6. Valore corretto in quanto il prezzo di entrata è calcolato un punto sotto al minimo della seconda barra del pattern che, in questo caso, vale 13.256,8. Il profitto, calcolato come da riga 19 del codice, vale 26,40. Quindi, l’uscita in gain dovrebbe avvenire a 13.230,4. In effetti, come mostra la seconda figura, avviene a 13.209. Perché?
Perché dopo l’ingresso, si sono presentati altri due pattern short, vedi terza figura, che hanno modificato il valore del profitto.
Allora il codice deve essere corretto. E come? Evitando che, quando il sistema è già a mercato, si rientri nella routine che ricalcola profitto, prezzo di entrata, ecc.
if InsideBar and SecondBarDown and SetupTime and Setup=0 then
EntryShort=Low-1*pipsize
Rischio=Range*percRischio+2*pipsize
Profitto=percProfitto*Rischio
Setup=-1
Endif
In questo modo il sistema entra in questa parte di codice solo se Setup=0.