Salve a tutti. Volevo implementare una strategia automatica che sfruttasse il breakout della prima mezz’ora sul DAX. La strategia è quella riportata in questa pagina. http://www.traderpedia.it/wiki/index.php/Il_breakout_dei_primi_30_minuti ; confronto a questa ho scelto di avere uno stop più ampio per lasciare più spazio al mercato.
Sto provando con 1.5 Microlotti.
Ho buttato già del codice (con le mie scarse conoscenze) e di primo acchito i risultati non mi sembrano malaccio. Quale accorgimento potrei inserire per migliorarlo? Sono ancora indeciso se mettere un target oppure sfruttare il solo trailing stop
DEFPARAM CumulateOrders = False
DEFPARAM flatafter = 170000
n = 1.5
IF Time = 093000 THEN
alto = highest[2](high)
basso = lowest[2](low)
ampiezza = alto – basso
compra = 0
vendi = 0
ENDIF
if Time > 093000 AND Time <= 170000 THEN
IF compra = 0 THEN
buy n share at alto stop
ENDIF
IF vendi = 0 THEN
sellshort n share at basso stop
ENDIF
ENDIF
If longonmarket THEN
compra = 1
ENDIF
IF shortonmarket THEN
vendi = 1
ENDIF
set stop ploss ampiezza pTRAILING ampiezza
Ti prego di usare il tasto “Insert PRT code” indicato con <> sulla barra grigia del post che stai scrivendo, per facilitare la lettura e la comprensione del codice, così:
DEFPARAM CumulateOrders = False
DEFPARAM flatafter = 170000
n = 1.5
IF Time = 093000 THEN
alto = highest[2](high)
basso = lowest[2](low)
ampiezza = alto – basso
compra = 0
vendi = 0
ENDIF
if Time > 093000 AND Time <= 170000 THEN
IF compra = 0 THEN
buy n share at alto stop
ENDIF
IF vendi = 0 THEN
sellshort n share at basso stop
ENDIF
ENDIF
If longonmarket THEN
compra = 1
ENDIF
IF shortonmarket THEN
vendi = 1
ENDIF
set stop ploss ampiezza pTRAILING ampiezza
Anche per inserire un link c’è il pulsante “insert/edit link”: http://www.traderpedia.it/wiki/index.php/Il_breakout_dei_primi_30_minuti
Roberto
Scusa per il quoting (è il mio primo messaggio).
Sì, 15 minuti. Prendo in esame candela della 9:00 e quella delle 9:15 per stabilire il range da cui il prezzo dovrebbe uscire
Si, mi sono accorto anche dall’immagine, nel frattempo avevo rimosso quella domanda.
Do un’occhiata.
Innanzitutto la riga 36, contrariamente agli esempi sul manuale, NON è accettata. Solo un ordine di STOP può essere dato contemporaneamente, o PLOSS o PTRAILING, quindi una delle due:
set stop ploss ampiezza //questa oppure...
set stop pTRAILING ampiezza //... questa, ma non insieme!
Nel test che ho fatto ho indicato un capitale iniziale di euro 500 come te, ma ho un drawdown di oltre 800 euro, il che significa che sarei andato in Margin Call!
Più piccolo è il capitale più alta è la percentuale di guadagno, ma in reale questo ti porebbe ad azzerare il conto in breve!
Non è molto importante la percentuale di guadagno, quello che importa maggiormante è l’affidabilità nel tempo e la continuità nel generare comunque un profitto, seppure inferiore alle aspettative. Certo la percentuale di guadagno è importante, ma non bruciare il conto lo è di più!
Ho provato ad inserire il Trailing Stop codificato da Nicolas (https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/)
con risultati migliori:
DEFPARAM CumulateOrders = False
DEFPARAM flatafter = 170000
n = 1.5
IF Time = 093000 THEN
alto = highest[2](high)
basso = lowest[2](low)
ampiezza = alto - basso
compra = 0
vendi = 0
ENDIF
//************************************************************************
//trailing stop function
trailingstart = 5 //trailing will start @trailinstart points profit
trailingstep = 5 //trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
//************************************************************************
if Time > 093000 AND Time <= 170000 THEN
IF compra = 0 THEN
buy n share at alto stop
ENDIF
IF vendi = 0 THEN
sellshort n share at basso stop
ENDIF
ENDIF
If longonmarket THEN
compra = 1
ENDIF
IF shortonmarket THEN
vendi = 1
ENDIF
//set stop ploss ampiezza pTRAILING ampiezza
set stop ploss ampiezza
//set stop pTRAILING ampiezza
Un’altra precisazione, la riga 8 occorre scriverla così per usare STOP pLOSS (la p minuscola sta per Pips), mentre com’è attualmente Ampiezza è la differenza in prezzo, non in Pips. Per il fatto che utilizzi la strategia col DAX e questo ha un valore espresso con 5 cifre il problema non si pone, ma se tu la provassi con altri strumenti otterresti risultati imprevedebili, perché il DAX se fai 13170 – 13151 ti da come risultato 19, che è sia una differenza di prezzo che di pips. Mentre Eur/Usd se fai 1.1770 – 1.1751 ti da 0.0019 che è la differenza in prezzo, non in Pips! Invece, moltiplicando il risultato per PIPSIZE la piattaforma te lo converte automaticamente in Pips:
ampiezza = (alto - basso) * pipsize
altrimenti non funzionerebbe nemmeno il codice di Trailing Stop che ho aggiunto, perché, come noterai, contiene spesso la parola chiave PIPSIZE (o POINTSIZE che è un sinonimo).
Grazie delle dritte. Ne farò tesoro.
Ciao, prova anche una strategia a breakout sul range della prima ora (dalle 9 alle 10) tf 15 ,i 3 target sono il range x1 x2 x3