Trailing stop
Forums › ProRealTime forum Italiano › Supporto ProOrder › Trailing stop
- This topic has 13 replies, 2 voices, and was last updated 7 years ago by R05.
-
-
09/27/2017 at 5:33 PM #47557
Salse a tutti, ho trovato il codice che allego riguardante il trailing stop. Mi aiutate a capire come va interpretato?
A me servirebbe un trailing stop che quando sta guadagnando diciamo 15 punti metta lo stop a pareggio, e poi andare avanti di step in step ogni 20 punti. Non so se questo codice faccia questo.
Vi ringrazio.
12345678910111213141516171819202122232425262728// TRAILING STOP LOGIKTGL =AverageTrueRange[14](close)*2.5TGS=AverageTrueRange[14](close)*1.7if not onmarket thenMAXPRICE = 0MINPRICE = closePREZZOUSCITA = 0ENDIFif longonmarket thenMAXPRICE = MAX(MAXPRICE,close)if MAXPRICE-tradeprice(1)>=TGL*pointsize thenPREZZOUSCITA = MAXPRICE-TGL*pointsizeENDIFENDIFif shortonmarket thenMINPRICE = MIN(MINPRICE,close)if tradeprice(1)-MINPRICE>=TGS*pointsize thenPREZZOUSCITA = MINPRICE+TGS*pointsizeENDIFENDIFif onmarket and PREZZOUSCITA>0 thenEXITSHORT AT PREZZOUSCITA STOPSELL AT PREZZOUSCITA STOPENDIF09/27/2017 at 6:33 PM #47561Credo di aver risolto la prima parte, e cioè partendo da uno stop loss iniziale di 30 punti, se il prezzo dovesse essere superiore di 15 punti rispetto all’entrata, allora mette lo stop in pareggio ovvero al prezzo di entrata.
Ora devo capire come fare in modo di continuare il trade con il trailing stop di 20 punti.
123456789101112131415161718192021222324252627282930SET STOP PLOSS 30// TRAILING STOP LOGIKTGL =15TGS=15if not onmarket thenMAXPRICE = 0MINPRICE = closePREZZOUSCITA = 0ENDIFif longonmarket thenMAXPRICE = MAX(MAXPRICE,close)if MAXPRICE-tradeprice(1)>=TGL*pointsize thenPREZZOUSCITA = MAXPRICE-TGL*pointsizeENDIFENDIFif shortonmarket thenMINPRICE = MIN(MINPRICE,close)if tradeprice(1)-MINPRICE>=TGS*pointsize thenPREZZOUSCITA = MINPRICE+TGS*pointsizeENDIFENDIFif onmarket and PREZZOUSCITA>0 thenEXITSHORT AT PREZZOUSCITA STOPSELL AT PREZZOUSCITA STOPENDIF09/27/2017 at 9:25 PM #47575Per il Breakeven vedi questo link https://www.prorealcode.com/blog/learning/breakeven-code-automated-trading-strategy/.
Questo è il codice:
123456789101112131415161718192021startBreakeven = 30 //30 pips in gain to activate the breakeven functionPointsToKeep = 5 //5 pips to keep in profit above/below entry price when the breakeven is activated//// test if the price have moved favourably of "startBreakeven" points already//// --- LONG sideIF LONGONMARKET AND (close - tradeprice(1)) >= (startBreakeven * pipsize) THENbreakevenLevel = tradeprice(1) + (PointsToKeep * pipsize) //calculate the breakevenLevel//place the new stop orders on market at breakevenLevelIF breakevenLevel > 0 THENSELL AT breakevenLevel STOPENDIFENDIF// --- SHORT sideIF SHORTONMARKET AND (tradeprice(1) - close) >= (startBreakeven * pipsize) THENbreakevenLevel = tradeprice(1) + (PointsToKeep * pipsize) //calculate the breakevenLevel//place the new stop orders on market at breakevenLevelIF breakevenLevel > 0 THENEXITSHORT AT breakevenLevel STOPENDIFENDIF1 user thanked author for this post.
09/27/2017 at 9:29 PM #47576Per il Trailing Stop vedi questo link https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/.
Questo è il codice:
123456789101112131415161718192021222324252627282930313233343536// trailing stop functiontrailingstart = 5 //5 trailing will start @trailinstart points profittrailingstep = 5 //5 trailing step to move the "stoploss//reset the stoploss valueIF NOT ONMARKET THENnewSL = 0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL = 0 AND CLOSE - TRADEPRICE(1) >= TrailingStart*PipSize THENnewSL = TRADEPRICE(1) + TrailingStep*PipSizeENDIF//next movesCAND = BarIndex - TradeIndexIF newSL > 0 AND CLOSE[1] > HIGHEST[CAND](CLOSE) THENnewSL = CLOSE[1] - TrailingStart*PipSizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL = 0 AND TRADEPRICE(1) - CLOSE[1] >= TrailingStart*PipSize THENnewSL = TRADEPRICE(1) - TrailingStep*PipSizeENDIF//next movesCAND = BarIndex - TradeIndexIF newSL > 0 AND CLOSE[1] < LOWEST[CAND](CLOSE) THENnewSL = CLOSE[1] + TrailingStart*PipSizeENDIFENDIF//stop order to exit the positionsIF newSL > 0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIF1 user thanked author for this post.
09/27/2017 at 10:09 PM #4757809/28/2017 at 11:04 AM #47632Gentilissimo Roberto ti ringrazio del codice del trailing stop e ti confermo che funziona alla grande. Volevo vhiederti, gentilmente, se per il giornaliero devo fare qualcosa in particolare, perchè dai backtest o mi prende il take profit o lo stop loss o mi va in pareggio.
Ti ringrazio.
09/28/2017 at 11:25 AM #47639Per il daily forse è un problema di numero di Pips di STOP o TAKE PROFIT, essendo spesso candele grandi è possibile che una candela sia sufficiente a farti uscire, in un modo o nell’altro.
Inoltre sul Daily non devi usare DEFPARAM FLATBEFORE/AFTER, altrimenti la strategia non funziona.
Un’altra cosa, sui TF più grandi spunta la casella “Probacktest in modlità tick per tick” per avere la sicurezza che la performance sia corretta, altrimenti puoi incorrere nel problema della “barra 0”, ovvero quando sulla stessa barra si verificano sia lo STOP LOSS che il TAKE PROFIT. Se tick per tick non è selezionato, ProOrder da per scontato il TAKE PROFIT. Con tick per Tick, invece, viene ricostruita la candela ad ogni tick, garantendoti il corretto ordine in cui sono colpiti. Questa funzionalità, aggiunta lo scorso 1 Gennaio 2017, non va molto indietro però, per cui se devi fare un backtest di più di 2-3 anni non potrai utilizzare questa modalità, rendendo il backtest meno efficace.
09/28/2017 at 1:14 PM #4766810/11/2017 at 2:22 PM #49043Gent.mi mi confermate che il trailing stop e il breakeven riportati sopra da Roberto applicate ad una qualsiasi strategia nel conto demo non funzionano?
Perchè nel backtest funzionano perfettamente (anche in demo) mentre quando va ad aprire la posizione direttamente nella piattaforma non me li prende.
Vi ringrazio
10/12/2017 at 9:59 AM #49089Non saprei dirti perché finché non ci sarà la versione multitimeframe opero solo in demo, sembra un pò strano, speriamo che Nicolas possa aiurati/aiutarci!
10/12/2017 at 2:54 PM #49142Ho un dubbio: allego il codice cui ho aggiunto il breakeven e il trailing stop per vedere se non abbia io fatto qualche errore nell’aggiungerli.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121DEFPARAM CumulateOrders = Falsedefparam flatbefore = 060000defparam flatafter = 220000ONCE TradeOnL = 0 //inizializzazione variabileONCE TradeOn = 0 //inizializzazione variabileIF OnMarket THENTradeOnL = 0 //una volta a mercato azzerare la variabileTradeOn = 0 //una volta a mercato azzerare la variabileENDIF// Condizioni per entrare longMacdValL = MACD[14,26,9] //valore del MACDIF MacdValL CROSSES OVER 0 THEN //se incrocia al rialzo....TradeOnL = 1 //...settare la variabile per tradare e...TopHigh = highest[10](high) //...salvare il massimo delle ultime 10 candele.ELSIF MacdValL CROSSES UNDER 0 THENTradeOnL = 0 //Se il MACD torna sotto lo 0, annullare tuttoENDIFIF summation[6](MacdValL > 0) = 6 THEN //se il MACD è sopra lo 0 da oltre 5 candele...TradeOnL = 0 //...annullare e ripartire da zero.ENDIFIF TradeOnL THEN //Se condizioni soddisfatte aprire il tradeBUY 1 CONTRACT AT tophigh stopENDIF// Condizioni per uscire da posizioni longindicator3 = MACDline[12,26,9](close)indicator4 = ExponentialAverage[9](indicator3)c2 = (indicator3 CROSSES UNDER indicator4)IF c2 THENSELL AT MARKETENDIF// Condizioni per entrare shortMacdVal = MACD[14,26,9] //valore del MACDIF MacdVal CROSSES UNDER 0 THEN //se incrocia al ribasso....TradeOn = 1 //...settare la variabile per tradare e...TopLow = lowest[10](low) //...salvare il minimo delle ultime 10 candele.ELSIF MacdVal CROSSES OVER 0 THENTradeOn = 0 //Se il MACD torna sopra lo 0, annullare tuttoENDIFIF summation[6](MacdVal < 0) = 6 THEN //se il MACD è sotto lo 0 da oltre 5 candele...TradeOn = 0 //...annullare e ripartire da zero.ENDIFIF TradeOn THEN //Se condizioni soddisfatte aprire il tradeSELLSHORT 1 CONTRACT AT toplow stopENDIF// Condizioni per uscire da posizioni shortindicator7 = MACDline[12,26,9](close)indicator8 = ExponentialAverage[9](indicator7)c4 = (indicator7 CROSSES OVER indicator8)IF c4 THENEXITSHORT AT MARKETENDIFset stop ploss 50startBreakeven = 15 //15 pips in gain to activate the breakeven functionPointsToKeep = 0 //0 pips to keep in profit above/below entry price when the breakeven is activated//// test if the price have moved favourably of "startBreakeven" points already//// --- LONG sideIF LONGONMARKET AND (close - tradeprice(1)) >= (startBreakeven * pipsize) THENbreakevenLevel = tradeprice(1) + (PointsToKeep * pipsize) //calculate the breakevenLevel//place the new stop orders on market at breakevenLevelIF breakevenLevel > 0 THENSELL AT breakevenLevel STOPENDIFENDIF// --- SHORT sideIF SHORTONMARKET AND (tradeprice(1) - close) >= (startBreakeven * pipsize) THENbreakevenLevel = tradeprice(1) + (PointsToKeep * pipsize) //calculate the breakevenLevel//place the new stop orders on market at breakevenLevelIF breakevenLevel > 0 THENEXITSHORT AT breakevenLevel STOPENDIFENDIF// trailing stop functiontrailingstart = 20 //20 trailing will start @trailinstart points profittrailingstep = 12 //12 trailing step to move the "stoploss//reset the stoploss valueIF NOT ONMARKET THENnewSL = 0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL = 0 AND CLOSE - TRADEPRICE(1) >= TrailingStart*PipSize THENnewSL = TRADEPRICE(1) + TrailingStep*PipSizeENDIF//next movesCAND = BarIndex - TradeIndexIF newSL > 0 AND CLOSE[1] > HIGHEST[CAND](CLOSE) THENnewSL = CLOSE[1] - TrailingStart*PipSizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL = 0 AND TRADEPRICE(1) - CLOSE[1] >= TrailingStart*PipSize THENnewSL = TRADEPRICE(1) - TrailingStep*PipSizeENDIF//next movesCAND = BarIndex - TradeIndexIF newSL > 0 AND CLOSE[1] < LOWEST[CAND](CLOSE) THENnewSL = CLOSE[1] + TrailingStart*PipSizeENDIFENDIF//stop order to exit the positionsIF newSL > 0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIF10/12/2017 at 2:55 PM #4914310/13/2017 at 7:44 AM #49234Ho fatto le verifiche sul DAX e TF h1, il problema c’è, ma, purtroppo, non è risolvibile.
Il codice per il trailing stop ed il breakeven opera insieme alla strategia, per cui viene eseguito solo alla fine della candela oraria corrente. A quel punto valuta i livelli e, in molti casi, capita che il livello sia più basso del breakeven; a quel punto NON chiude subito l’operazione (che non è più a breakeven, ma in loss) ma mette un ordine pendente che chiuda l’operazione quando torna a breakeven, cosa che alcune volte non capita e la perdita aumenta. Si potrebbe modificare il codice per dirgli che, se il breakeven era stato attivato precedentemente ed ora l’operazione è in perdita, questa venga immediatamente, In pratica è un pò come dirgli “se riesci a chiudere a breakeven bene, ma in ogni caso chiudi se in perdita”.
Purtroppo sui TF lunghi questo è il problema, almeno finché non sarà messa a disposizione la versione multitimeframe che, stanto a quanto si dice, dovrebbe risolvere questi problemi. magari perché parti del codice, come questi, potrebbero essere eseguiti ogni secondo, lasciando il resto della strategia operare sul TF h1.
Certamente sul TF a 1 minuto grossi problemi non dovrebbero esserci.
10/15/2017 at 12:48 PM #49397Ok grazie Roberto. Bene a sapersi, a questo punto devo riconsiderare bene le strategie. Peccato però. Speriamo che prorealtime implementi al più presto la funzionalità multitimeframe perchè altrimenti si potrebbe essere un pò limitati.
-
AuthorPosts
Find exclusive trading pro-tools on