Ho trovato la seguente strategia che ho provato a codificare
Strumento: DAX
Time frame: Giornaliero
Spread : 3 punti
Condizioni di entrata:
Long alla rottura del Prezzo medio di ciascuna barra [(Max+Min+Open+Close)/4] + ATR a 9 periodi se la candela precedente è rossa;
Short alla rottura del Prezzo medio di ciascuna barra [(Max+Min+Open+Close)/4] – ATR a 9 periodi se la candela precedente è bianca;
Condizioni di uscita:
Target: prezzo di ingresso + ATR 9 periodi (caso long)
prezzo di ingresso – ATR 9 peridi (caso Short)
Trailing Stop:
Sul minimo delle ultime due candele (caso long) o sul massimo delle ultime 2 candele (caso Short)
Stop loss:
3%
Viene presentata come una buona strategia.
A me non sembra una buona strategia: ci sono molti anni in perdita.
Ho fatto errori nella scrittura della strategia?
Cosa ne pensate?
Defparam cumulateorders = false
//Definizione parametri
EntrataLong = TotalPrice + AverageTrueRange[9](close)
EntrataShort = TotalPrice - AverageTrueRange[9](close)
TPLong = tradeprice + AverageTrueRange[9](close)
TPShort = tradeprice - AverageTrueRange[9](close)
TrailingStopLong = low [2]
TrailingStopShort = high [2]
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND close < open THEN
BUY 1 CONTRACTS AT EntrataLong stop
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket THEN
SELL AT TPLong limit
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ShortOnMarket AND close > open THEN
SELLSHORT 1 CONTRACTS AT Entratashort stop
ENDIF
// Condizioni per uscire da posizioni short
IF ShortOnMarket THEN
EXITSHORT AT TPShort limit
ENDIF
// trailing stop
if Longonmarket then
SET STOP TRAILING TrailingStopLong
endif
if ShortOnMarket then
SET STOP TRAILING TrailingStopShort
endif
// definizione stop loss
SET STOP %LOSS 3
Hai scritto “se la candela precedente” è rossa o bianca, però nelle condizioni hai messo la candela corrente, non quella precedente.
Prova ad usare un codice per il trailing stop invece dell’istruzione nativa.
In merito alla candela ho modificato indicando la candela precedente: cosi facendo il risultato però peggiora.
Forse è corretto scrivere close e non close[1] : perchè con Prorealtime la verifica della condizione viene fatta a fine candela per poi entrare a quella successiva.
Probilmente chi ha postato il codice utilizza un programma che permette di entrare a mercato all’apertura con verifica della candela del giorno precedente: questo in prorealcode mi pare che non sia possibile.
Esempio: all’apertura del giorno 10 luglio voglio entrare a mercato se il 09 luglio (candela precedente) l’apertura è stata minore della chiusura devo scrivere:
IF NOT LongOnMarket AND close < open THEN
BUY 1 CONTRACTS AT EntrataLong stop
ENDIF
in questo modo viene verificata la chiusura del giorno precedente (il 09 luglio) ed il 10 luglio entra in posizione.
Probabilmete ci sono programmi che permettono il giorno 10 di entrare a mercato verificando il giorno stesso (10 luglio) la condizione del giorno precedente (il giorno 09).
Che intendi con “perchè con Prorealtime la verifica della condizione viene fatta a fine candela per poi entrare a quella successiva”?
Vuoi dire che con le altre piattaforme le condizioni le verifichi prima che la candela sia chiusa? anche col trading manuale non attendi che la candela chiuda?
Se è così, puoi farlo anche con ProRealTime. Il supporto MTF permette sia UPDATEONCLOSE per i segnali a chiusura candela che DEFAULT per i segnali a candela in formazione (secondo i tempi del TF più piccolo prescelto).
Se scrivi
x = close
su un TF giornaliero, X conterrà il prezzo di chiusura della candela chiusa (giorno precedente, come dici tu).
Se usi il supporto MTF potrà contenere il prezzo di chiusura del giorno precedente o di quello corrente, a tua scelta come ho scritto sopra.
La frase “perchè con Prorealtime la verifica della condizione viene fatta a fine candela per poi entrare a quella successiva” ha fatto confusione.
Nonostante questo mi hai chiarito come usare close nel mio caso. grazie