Ciao a tutti!
Vorrei utilizzare uno stop fisso, un take profit fisso e un trailing stop che parta e che una volta partito disattivi il take profit fisso (se possibile). Mi spiego meglio..
Il codice funziona benissimo, ma il take profit rimane fisso e quindi la posizione viene chiusa in profitto ma potrebbe andare anche oltre.
Incollo il codice e chiedo gentilmente cosa dovrei modificare per far si che ottenga questo risultato, il codice è stato ottimizzato con probacktest sul dax 5€ a punto, l’indicatore utilizzato è stato realizzato da me, oggi ha aperto una posizione short sul dax che è andata in profitto di 30 punti (valore del take profit), ma il prezzo è sceso ancora tantissimo e avrei potuto prendere tutto il movimento se avessi avuto un trailing stop funzionante.
Io penso che il trailing stop non sia nemmeno partito. Da ottimizzazione, i seguenti, erano i risultati e i valori migliori, sicuramente sto sbagliando qualcosa! Grazie mille in anticipo!
DEFPARAM PRELOADBARS = 10000
DEFPARAM CumulateOrders = False
DEFPARAM FLATBEFORE = 090000
DEFPARAM FLATAFTER = 220000
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
myINDICATORE = CALL INDICATORE
c1 = (myINDICATORE = 1)
IF c1 AND NOT daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
SET STOP PLOSS 10
SET TARGET PPROFIT 30
trailingstart = 11
trailingstep = 376
IF NOT ONMARKET THEN
newSL=0
ENDIF
IF LONGONMARKET THEN
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
IF SHORTONMARKET THEN
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
Senza l’indicatore è impossibile provarlo.
Grazie Roberto, però vorrei sapere magari se ci sono i settaggi scorretti a livello di trailing stop, take profit e stop loss.. Cioè se li devo usare tutti e 3, se il codice per avviare il trailing stop è corretto ecc..
Grazie! 🙂
Io l’ho provato sul DAX a 10 minuti mettendo
myINDICATORE = 1
e mi pare funzioni correttamente. Vedo che quasi tutti gli SL sono di € 250, cioè 10 pips (a 25 € caduno).
A volte il Trailing Stop entra, però con uno step di 376 pips la vedo dura che riesca a fare qualcosa di buono, è enorme,generalmente si incrementa di 10-20 pips. Nel tuo caso con un TP di 30 pips non ha molto senso.
Ho provato a cambiare i valori così
SET STOP PLOSS 20
SET TARGET PPROFIT 35
trailingstart = 11
trailingstep = 15
e vedo funziona molto meglio. Fai molte prove con valori diversi finché non trovi quelli giusti.
Ok perfetto grazie mille, un’ultima cosa, io ho 2 codici per avviare il trailing stop.. Posso chiederti quale reputi sia il migliore? Calcolando che uno però non ha il take profit, non so se posso ritenerlo affidabile, però chiedo infatti a te:
DEFPARAM PRELOADBARS = 10000
DEFPARAM CumulateOrders = False
DEFPARAM FLATBEFORE = 090000
DEFPARAM FLATAFTER = 220000
PointTarget= 123456 // limite punti di profitto
PointStop= 123456 // limite punti di perdita
size= 1 // numero di contratti/valore del pip (punto)
PointSogliaTrailing= 123456 // valore che attiva il trailingstop
PointTrailingStop= 123456 // valore del trailingstop
Indicator1=CALL "EGL"
c1=(Indicator1=2)
c2=(Indicator1=1)
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
IF c1 AND NOT LongOnMarket AND NOT daysForbiddenEntry THEN
BUY size CONTRACTS AT MARKET
SET STOP pLOSS PointStop
SET TARGET pPROFIT PointTarget
ENDIF
IF PointTrailingStop>0 AND ONMARKET THEN
if LongOnMarket and High>=POSITIONPRICE+PointSogliaTrailing*POINTVALUE then
SET STOP pTRAILING PointTrailingStop
endif
ENDIF
DEFPARAM PRELOADBARS = 10000
DEFPARAM CumulateOrders = False
DEFPARAM FLATBEFORE = 090000
DEFPARAM FLATAFTER = 220000
trailingstart = 123456 //trailing will start @trailinstart points profit
trailingstep = 123456 //trailing step to move the "stoploss"
Indicator1=CALL "EGL"
c1=(Indicator1=2)
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
IF C1 AND NOT daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF
//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
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
ENDIF
Mi piacerebbe anche capirne possibilmente la differenza a livello funzionale (a parte la presenza o meno di take profit, stop loss ecc)
Non saprei dirti. Se non in qualche prova iniziale, non ho mai usato
SET STOP pTRAILING
perché non mi piaceva.
Ok ti ringrazio, nelle ottimizzazioni, te personalmente preferisci le variabili con maggior guadagno ma percentuale di posizioni profittevoli minore oppure scegli minor guadagno ma percentuale di posizioni profittevoli maggiore?
Grazie, ciao buona giornata e buon week end!
Per me la precedenza assoluta va alla percentuale di profittabilità. Il guadagno può essere inferiore o maggiore, ma l’importante è chiudere in profitto ogni volta che è possibile!
Grazie. Buon fine settimana anche a te.
Perdonami Roberto, però con set stop ptrailing succede che mi apre la posizione ma il trailing stop rimane fisso a 0 e non capisco perchè non segue il prezzo! Mi sta facendo dannare!
Io non uso
set stop ptrailing
però l’ho provato sul Dax a 1 minuto e funziona, mi ha chiuso alcune operazioni in profitto usando il trailing stop nativo.
Porca miseria e che trailing stop adoperi? Perchè io uso il TF a 4H sul dax, ma non parte. Ho provato a cercare e ne ho trovato uno di Nicolas nella sezione “learning” che è spettacolare, però se metto Take profit e Stop loss in automatico il sistema mi trova variabili molto più basse rispetto al trailing stop e per tanto è come se non ci fosse perchè mi prende il take profit ancor prima che parta il trailing stop.. Se invece non metto ne stop loss e ne take profit, mi da solo risultati negativi il backtest..
DEFPARAM PRELOADBARS = 10000
DEFPARAM FLATBEFORE = 090000
DEFPARAM FLATAFTER = 215500
Indicator1=CALL "EGL"
c1=(Indicator1=2)
IF C1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
SET STOP PLOSS sl
SET TARGET PPROFIT tp
trailingstart = tr1
trailingstep = tr2
IF NOT ONMARKET THEN
newSL=0
ENDIF
IF LONGONMARKET THEN
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
IF SHORTONMARKET THEN
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
Sul 4h occorreranno valori adeguati, specialmente sul DAX in una sola candela si possono muovere anche 100-200 pips!
Comunque io avevo fatto la prova con il trailing stop nativo della pòiattaforma.
Ad ogni modo io uso sempre il codice di Nicolas e funziona!
Si si ma ne sono certissimo che funziona, però non so perchè non mi trova le giuste variabili (a 4h) sul dax, ho provato anche su altri mercati.. Guarda, questo è il codice che uso, dove “TR1” e “TR2” sono le due variabili che voglio trovare ed “EGL” è l’indicatore da me creato che funziona benissimo con TAKE PROFIT E STOP LOSS.
DEFPARAM PRELOADBARS = 10000
DEFPARAM FLATBEFORE = 090000
DEFPARAM FLATAFTER = 215500
Indicator1=CALL "EGL"
c1=(Indicator1=2)
IF C1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
trailingstart = TR1
trailingstep = TR2
IF NOT ONMARKET THEN
newSL=0
ENDIF
IF LONGONMARKET THEN
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
IF SHORTONMARKET THEN
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
Mi pare che il codice sia corretto. Non prosso provarlo perché manca l’indicatore e parti del codice.