Salve a tutti. Mi sono appena iscritto al forum, ma “uso” la piattaforma di Prorealtime da un pò di tempo e recentemente ho aperto un conto con IG per iniziare a testare dal vivo alcuni miei sistemi.
Oggi però mi sono accorto di un problema sul backtest di un codice.
Questa è la porzione di codice che, sono in alcuni casi, genera il problema, chiudendo senza motivo la posizione appena aperta.
if ((BarIndex – TradeIndex)>2) then
C03=1
else
C03=2
endif
if c03=1 then
C04= (HIGHEST[(BarIndex – TradeIndex)](high))
endif
//TORO —————————————————————————-
IF A1=1 AND A4=2 AND A5=1 and c1=1 and c2=1 and c3=1 and c4=1 THEN
BUY 1 SHARES AT MARKET
ENDIF
If c04>(tradeprice*100.6/100) and C04<= (TRADEPRICE*100.9/100) and c03=1 then
sell at (tradeprice*100.4/100) stop
elsif c04>(tradeprice*100.9/100) and C04<= (TRADEPRICE*101.2/100) and c03=1 then
sell at (tradeprice*100.7/100) stop
elsif c04>(tradeprice*101.2/100) and C04<= (TRADEPRICE*101.5/100) and c03=1 then
sell at (tradeprice*101.0/100) stop
elsif c04>(tradeprice*101.5/100) and C04<= (TRADEPRICE*101.8/100) and c03=1 then
sell at (tradeprice*101.3/100) stop
elsif c04>(tradeprice*101.8/100) and C04< (TRADEPRICE*102.1/100) and c03=1 then
sell at (tradeprice*101.6/100) stop
endif
Il sistema ha anche un take profit e uno stoploss fissi, ma il codice precedente lo uso per “proteggere” il profitto a modo mio, in maniera simile a un trailing stop.
Nella maggioranza dei casi il codice funziona bene, ma ogni tanto, come ho detto prima, mi chiude subito la posizione e non riesco a capire perchè. Lo sto testando sul DAX con grafico a candele di 5 minuti. Di seguito una immagine con due ordini chiusi senza motivo. Se cancello questa parte di codice, e lascio solo tp ed sl fissi, il primo dei due ordini prosegue tranquillo, anche se ovviamente il rendimento totale cala non poco.
Usa sempre il pulsante “Insert PRT code” quando inserisci il codice nei tuoi post per facilitare la lettura degli altri.
Grazie 🙂
Nelle righe da 14 a 24 non puoi essere sicuro che il prezzo corrente (CLOSE) sia > del tuo Stop Loss. Se non lo è perché magari è lontano dal massimo più alto, invece di essere eseguito come STOP il tuo ordine pendente di uscita può essere eseguito LIMIT o addirittura a MERCATO se non rispetta il minimo richiesto dal broker.
Questo è quello che posso dirti vedendo il codice che hai postato.
Ciao Roberto.
Ti ringrazio per la risposta! Effettivamente quello che dici mi sembra corretto, però affinchè quegli ordini stop vengano eseguiti devono essere trascorse almeno 2 candele (condizione definita sulla riga 2), mentre invece gli ordini che mi chiude in maniera inaspettata, li chiude sulla stessa candela di apertura.
Perché C04 è vero solo dopo 2 barre, però quella condizione viene riportata barra dopo barra senza essere MAI azzerata, per cui dopo la prima ooerazione sarà sempre vera, per questo esce subito.
Prima della riga 1 inserisci queste:
If STRATEGYPROFIT <> STRATEGYPROFIT[1] Then
C03 = 0
C04 = 0
Endif
che azzera le due variabili alla chiusura di ogni operazione (in profitto o meno).
Buongiorno Roberto.
Ti ringrazio per il tuo aiuto. Questa sera ristudierò l’azzeramento delle condizioni.
Ho fatto una prova inserendo le righe che mi hai suggerito, ma il risultato non cambia. Tra l’altro lo fa solo in alcuni casi, magari si “comporta bene” per 2 o 3 operazioni, inseguendo il massimo come previsto, e poi ne sbaglia una.