Ciao a tutti,
sto cercando di effettuare il backtest di una strategia che prevede l’uscita in take profit o in stop loss basandosi sull’ATR a 5 periodi, ma non riesco a settare le corrette uscite dalle posizioni.
Ecco di seguito il codice che ho provato ad utilizzare, ma che non funziona perchè mi entra in posizione su ogni barra e mi esce dalla posizione nella barra successiva.
mm200 = average[200] (close)
mm20 = average[20](close)
stddeviation = STD[20](close)
bsup = mm20 + 1.5 * stddeviation
binf = mm20 - 1.5 * stddeviation
MYLIMITBUY = binf - (binf*5/100)
MYLIMITSELL = bsup + (bsup*5/100)
tplong = mylimtbuy + (averagetruerange[5](close))*2
sllong = mylimitbuy - (averagetruerange[5](close))*2
tpshort = mylimitsell - (averagetruerange[5](close))*2
slshort = mylimitsell + (averagetruerange[5](close))*2
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND close>mm200 and close<binf THEN
BUY 100 SHARES AT MYLIMITBUY LIMIT
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND tplong OR sllong THEN
SELL AT MARKET
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ShortOnMarket AND close<mm200 and close>bsup THEN
SELLSHORT 100 SHARES AT MYLIMITSELL LIMIT
ENDIF
// Condizioni per uscire da posizioni short
IF ShortOnMarket AND tpshort OR slshort THEN
BUY AT MARKET
ENDIF
Grazie per l’aiuto!
CIAO
TI SUGGERISCO DI USARE IL COMANDO GRAPH
PER VEDERE A MONITOR I VALORI CALCOLATI
GRAPH MYLIMITBUY
GRAPH tplong
GRAPH sllong
POI MI SEMBRA CHE I CALCOLI SONO ERRATI COMUNQUE LO SCRIPT DOVREBBE ESSERE QUESTO
IF NOT LongOnMarket AND close>mm200 and close<binf THEN
BUY 1 SHARES AT MYLIMITBUY LIMIT
SET STOP LOSS sllong
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<mm200 and close>bsup THEN
SELLSHORT 1 SHARES AT MYLIMITSELL LIMIT
SET STOP LOSS slshort
ENDIF
// Condizioni per uscire da posizioni short
IF ShortOnMarket THEN
EXITSHORT AT tpshort LIMIT
ENDIF
Buongiorno papero76, ti prego di evitare di scrivere SEMPRE in maiuscolo, è contrario alla netiquette (l’etichetta, o galateo, della rete) in quanto associato allo STRILLARE, URLARE per affermare le proprie ragioni. Usa il maiuscolo solo in qualche occasione quando devi evidenziare una certa parola o un breve concetto. Grazie.
Per l’entrata in posizione su ogni barra basta che metti sul grafico di tua scelta una media a 200, una media a 20 con le bande superiori ed inferiori (la bande sono semplicemente la setssa media con in + o – i parametri che tu gli hai detto, cioè STD[20]*1.5) in modo da verificare, visivamente ed usando GRAPH, come ti ha suggerito papero76, i valori delle variabili interessate, che sono
le altre, almeno in un primo tempo, non t’interessano. Con questo riuscirai a capire perché entra ad ogni barra.
Quanto all’uscita è più semplice, esce perché alle righe 17 e 25 tu verifichi solo che le variabili
- tplong
- sllong
- tpshort
- slshort
siano vere (cioè diverse da zero) e lo sono SEMPRE avendogli assegnato tu un valore alle precedenti righe 8-11, mentre dovresti mettere un ordine pendente come ha fatto parzialmente
papero76, lui ha usato il comando SET per lo stop loss ed un ordine pendente per il target profit. Suggerisco di usare la stessa tecnica, usare SET o ordini pendenti per entrambi.
Quanto alle righe 3 e 13 scritte da
papero76, non vanno bene, perchè quelle due variabili contengono un prezzo (che andrebbe bene con ordini pendenti), mentre LOSS vuole una DIFFERENZA tra prezzi espressa in prezzo (ad esempio 0.0020) e PLOSS vuole la stessa cosa ma espressa in pips (ad esempio 20).
Alla fine ho deciso di fissare stop loss e take profit in percentuale e perciò sono riuscito a far funzionare i backtest!
Grazie a tutti per l’aiuto!
sta cosa del maiscolo non la ricordo mai?
se scrivo in maiscolo sicnifica che sto lavorando un codice….. per comodità e velocità non cambio
Non preoccuparti, stavolta l’hai ricordata!