Buongiorno Roberto, avevo bisogno di un tuo super aiuto.. ti allego la prima parte si una strategia che avevo in mente solo che non capisco perchè il backtest non mi restituisce alcun risultato. Sapresti dirmi dove sbaglio?
il mio intento è quello di dare un segnale derivato da un timeframe 1h per determinare il trend e dopo lavorare su timeframe di default che sarà 5min.
All’incrocio delle medie vorrei impostare il SL e nelle successive candele, alla prima rossa disponibile, assegnare TP e prezzo di entrata.
Dove sbaglio secondo te?
Grazie mille anticipatamente
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 100000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 203000
// Impedisce al sistema di tradare in giorni specifici della settimana
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
timeframe (1h,updateonclose)
N=50
indicator1 = ExponentialAverage[N](close)
indicator2 = ExponentialAverage[N](close)
c1 = (indicator1[1] < indicator2[2]) and (indicator1[2] - indicator2[1]) > 0.00015
indicator3 = ExponentialAverage[N](close)
indicator4 = ExponentialAverage[N](close)
c2 = (indicator3[2] < indicator4[3]) and (indicator3[3] - indicator4[2]) > 0.00015
indicator5 = ExponentialAverage[N](close)
indicator6 = ExponentialAverage[N](close)
c3 = (indicator5[3] < indicator6[4]) and (indicator5[4] - indicator6[3]) > 0.00015
timeframe (default)
signal=0
sl=0
price=0
Tp=0
pip=pipsize
signal2=0
if c1 and c2 and c3 then
signal2=1
endif
indicator7 = ExponentialAverage[3](close)
indicator8 = ExponentialAverage[8](close)
c4=indicator7[1] crosses under indicator8[1]
c5=indicator7 crosses over indicator8
if signal2=1 and c4 then
signal=1
endif
if signal=1 and open>close then
sl=high + (2 * pip)
endif
if sl > 0 then
price= low - (AverageTrueRange[14](close)/2)
TP = price - ((sl - price) * 3)
endif
if low crosses under price and not daysForbiddenEntry then
buy 1 contract at market
else
if c5 then
signal=0
signal2=0
sl=0
price=0
TP=0
endif
endif
SET STOP $LOSS sl
SET TARGET $PROFIT Tp
Perché alla riga 20 confronti lo stesso indicatore per vedere se < a se stesso!
a dire il vero volevo che la l’indicatore su candela [1] fosse < dell’indicatore stesso ma della candela [2]
sbaglio qualcosa?
Ho semplificato il codice per capirne l’errore ma niente, attiva ordini in modo non voluto. ti allego il codice dove faccio cerco una EMA a 1H che sia inferiore della candela precedente e in Timaframe 5m cerco un incrocio di medie veloci. é come se non tenesse conto della prima condizione
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 110000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 193000
timeframe(1h)
i1 = ExponentialAverage[200](close)
timeframe(default)
c1=i1 < i1[1]
i2=ExponentialAverage[3](close)
i3=ExponentialAverage[8](close)
c2=i2 crosses under i3
if c1 and c2 then
sellshort 1 contract at market
endif
sicuramente sbaglio io qualcosa e per questo mi scuso anticipatamente.
Grazie del supporto come sempre
La riga 17 fa riferimento non alla barra precedente oraria, ma alla barra precedente del 5 minuti.
Spostala tra la riga 24 e 15. Però alla riga 13 aggiungi UpdateOnClose altrimenti non cambia niente.
Roberto sto impazzendo. non capisco dove sbaglio. Non rispetta SL ne TP. non capisco perchè non li aggiorna.
Ti allego il codice se puoi provare a backtestarlo su timeframe 5m vedi quello che vedo io. Non capisco tutte quelle posizioni chiuse per 1 pip e nemmeno tutte quelle posizioni aperte random.. sicuramente c’è qualcosa che sbaglio ma non ci dormo da 2 giorni con questo pensiero.
Help me please! 🙏🏻
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l’orario “Flat Before” non saranno piazzati nuovi ordini o posizioni.
//DEFPARAM FLATBEFORE = 110000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario “Flat After”
//DEFPARAM FLATAFTER = 193000
N=230//periodi Ema 1h
N1=5//periodi Ema veloce default
N2=13//periodi Ema lenta default
//n3=100 //periodi Ema extralenta default
// Impedisce al sistema di tradare in giorni specifici della settimana
//daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
timeframe(1h,updateonclose)
indicator=exponentialaverage[n](close)
c1 = (indicator[1] – indicator) > 0.0001
timeframe(default,updateonclose)
//atr=AverageTrueRange[14](close) > 0.0005
indicator1 = ExponentialAverage[N1](close)
indicator2 = ExponentialAverage[N2](close)
//indicator3 = ExponentialAverage[N3](close)
c2=indicator1 crosses under indicator2
c3=indicator1 crosses over indicator2
if (c1 and c2 ) and open > close then
sl=high
price=close
endif
if indicator1 crosses under price and open > close then
sellshort 1 contract at market
tp= ((sl-indicator1) * 10000)*3
set stop ploss sl
set target pprofit tp
endif
if c3 then
sl=0
tp=0
endif
dimenticavo.. i miei parametri sono EURUSD a 15.000 unità
pLOSS e pPROFIT vogliono una DIFFERENZA espressa in PIPS (10, 20, 100, o un’espressione ma sempre che restituisca pips).
Ad esempio, nel tuo caso la riga 31 deve essere scritta:
sl=(high - close) / pipsize
cioè devi fare la differenza tra il prezzo d’entrata a mercato e poi devi cinvertirlo in pips (oppure non lo converti in pips, ma allora devi usare LOSS, non pLOSS).
Grazie Roberto, ero convinto di averti risposto.
Scusa il ritardo.
buona giornata
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
defparam PRELOADBARS = 1000
// Condizioni per entrare su posizioni long
indicator1 = ExponentialAverage[500](close)
indicator2 = ExponentialAverage[21](close)
c1 = (close CROSSES OVER indicator1)
c2 = (indicator1 >= indicator1[3])
c3 = (indicator2 >= indicator2[3])
Sl=0
TP=0
if c1 and c2 and c3 then
Sl= ((lowest[24](low))-close)/pointsize
TP= SL * 1.75
Buy 1 contract at market
endif
set stop ploss sl
set target pprofit tp
Buona sera Roberto, ho fatto un passo indietro per testare in semplicità. Non mi calcola lo stop loss come vorrei. Io vorrei calcolare il più basso livello di LOW delle precedenti 24 bar mentre il TP non è altro che la moltiplicazione dello SL per 1.75
cortesemente mi indicheresti dove sbaglio?
Grazie
Alle righe 12 e 13 lo azzera ad ogni barra, per cui SL e TP vengono disattivati.
A entrambi mettici la parola ONCE + spazio, davanti.
Ho fatto ma non esegue lo stop loss… parte con un ordine e non stacca più
Perché il calcolo dello SL è negativo, essendo il LOW inferiore a CLOSE, modifica la riga 16 (in aggiunta alle modifiche già fatte sopra) così:
Sl= abs((lowest[24](low))-close)/pointsize
in pratica metti solo ABS all’inizio, che restituisce il valore assoluto, quindi trasforma i negativi in positivi.
Che stupido che sono. Hai ragione funziona.
Grazie
Buonasera puoi pubblicare il codice corretto che sto testando dalla mia parte?