ATR stop loss e take profit
Forums › ProRealTime forum Italiano › Supporto ProOrder › ATR stop loss e take profit
- This topic has 16 replies, 2 voices, and was last updated 4 years ago by robertogozzi.
-
-
08/24/2020 at 9:02 AM #142403
Buongiorno stavo testando una strategia sui cinque minuti e vorrei inserire uno stop loss e un take profit con l’aiuto dell’ATR (7 periodi) più precisamente vorrei che lo stop loss ad esempio fosse la metà o anche un terzo del’atr (dato che nel timeframe 5 minuti comunque risulta molto grande) e che il take profit fosse 3 volte lo stop loss, ho visto molti codici in giro ma alcuni erano anche molto complessi e non rispecchiavano le mie condizioni qualcuno mi potrebbe aiutare? Grazie
08/24/2020 at 9:16 AM #142408Eccolo:
1234567IF MieCondizioniLong THENBUY 1 CONTRACT AT MARKETSL = AverageTrueRange[7](close) / 3TP = SL * 3SET TARGET PROFIT TPSET STOP LOSS SLENDIF08/25/2020 at 8:55 PM #142554123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687// Definizione dei parametri del codiceDEFPARAM CumulateOrders = True // 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 = 000000// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario "Flat After"DEFPARAM FLATAFTER = 235900//TIMEFRAME(default)// Impedisce al sistema di tradare in giorni specifici della settimanadaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Condizioni per entrare su posizioni longindicator1 = Average[3](Stochastic[5,3](close))c1 = (indicator1 CROSSES OVER 20)//TIMEFRAME(1 hour,default)indicator2 = ExponentialAverage[9](close)indicator3 = ExponentialAverage[21](close)c2 = (indicator2[1] > indicator3[1])//TIMEFRAME(default)IF (c1 AND c2) AND not daysForbiddenEntry THENBUY 1 SHARES AT MARKETENDIF// Condizioni per entrare su posizioni shortindicator4 = Average[3](Stochastic[5,3](close))c3 = (indicator4 CROSSES UNDER 80)//TIMEFRAME(1 hour,default)indicator5 = ExponentialAverage[9](close)indicator6 = ExponentialAverage[21](close)c4 = (indicator5[1] < indicator6[1])//TIMEFRAME(default)IF (c3 AND c4) AND not daysForbiddenEntry THENSELLSHORT 1 SHARES AT MARKETENDIFTIMEFRAME (5minute,upDateOnClose)//************************************************************************//trailing stop functiontrailingstart = 20 //trailing will start @trailinstart points profittrailingstep = 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 movesIF newSL>0 AND close-newSL>=trailingstep*pipsize THENnewSL = newSL+trailingstep*pipsizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THENnewSL = tradeprice(1)-trailingstep*pipsizeENDIF//next movesIF newSL>0 AND newSL-close>=trailingstep*pipsize THENnewSL = newSL-trailingstep*pipsizeENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIF//************************************************************************// Stop e targetIF (c1 AND c2)And not OnMarket THENBUY 1 CONTRACT AT MARKETSL = AverageTrueRange[7](close) / 3TP = SL * 3SET TARGET PROFIT TPSET STOP LOSS SLENDIFCredo ci sia qualche problema, riscrivo le condizioni della strategia per fare in modo che sia più chiaro possibile, Si svolge su due timeframe h1 dove ci sono le due medie mobili esponenziali a 9 e 21 periodi e al timeframe 5 minuti dove c’è lo stocastico, vorrei che le posizioni siano cumulative cioè anche se una già è aperta ne deve aprire altre, le condizioni di ingresso long che la media 9 periodi si trovi sopra alla media a 21 periodi nel time frame h1 ( però deve considerare le chiusura nel time frame a 5 minuti sennò mi apre posizioni dal verso sbagliato anche se al termine della candela oraria non si è verificato l’incrocio)e che lo stocastico incroci al rialzo il valore 20 mentre entrata short che la media a 9 periodi sia al di sotto della media a 21 periodi e che lo stocastico incroci al ribasso il valore 80, per chiudere le posizioni si deve considerare il valore numerico dell’atr ( a 7 periodi)all’apertura della posizione e vorrei che quel valore fosse diviso per 5 per lo stop loss, per quanto riguarda il take profit vorrei che fosse 3 volte lo stop loss, l’atr non mi deve seguire la posizione ma deve solo darmi il valore numerico in quel momento per decidere stop loss e take profit, grazie per chi mi aiuterà.
08/26/2020 at 12:31 PM #142592Questo dovrebbe andare:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495// Definizione dei parametri del codiceDEFPARAM CumulateOrders = True // 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 = 000000// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario "Flat After"DEFPARAM FLATAFTER = 235900//TIMEFRAME(default)// Impedisce al sistema di tradare in giorni specifici della settimanadaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0IF Not OnMarket THENSL = 0TP = 0ENDIF// Condizioni per entrare su posizioni longindicator1 = Average[3](Stochastic[5,3](close))c1 = (indicator1 CROSSES OVER 20)//TIMEFRAME(1 hour,default)indicator2 = ExponentialAverage[9](close)indicator3 = ExponentialAverage[21](close)c2 = (indicator2[1] > indicator3[1])//TIMEFRAME(default)IF (c1 AND c2) AND not daysForbiddenEntry THENIF SL = 0 OR ShortOnMarket THENSL = AverageTrueRange[7](close) / 3TP = SL * 3ENDIFBUY 1 SHARES AT MARKETSET TARGET PROFIT TPSET STOP LOSS SLENDIF// Condizioni per entrare su posizioni shortindicator4 = Average[3](Stochastic[5,3](close))c3 = (indicator4 CROSSES UNDER 80)//TIMEFRAME(1 hour,default)indicator5 = ExponentialAverage[9](close)indicator6 = ExponentialAverage[21](close)c4 = (indicator5[1] < indicator6[1])//TIMEFRAME(default)IF (c3 AND c4) AND not daysForbiddenEntry THENIF SL = 0 OR LongOnMarket THENSL = AverageTrueRange[7](close) / 3TP = SL * 3ENDIFSELLSHORT 1 SHARES AT MARKETSET TARGET PROFIT TPSET STOP LOSS SLENDIFTIMEFRAME (5minute,upDateOnClose)//************************************************************************//trailing stop functiontrailingstart = 20 //trailing will start @trailinstart points profittrailingstep = 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 movesIF newSL>0 AND close-newSL>=trailingstep*pipsize THENnewSL = newSL+trailingstep*pipsizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THENnewSL = tradeprice(1)-trailingstep*pipsizeENDIF//next movesIF newSL>0 AND newSL-close>=trailingstep*pipsize THENnewSL = newSL-trailingstep*pipsizeENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIFSe riscontri errori, indica:
- strumento su cui opera
- data ed ora della candela dove c’è l’errore
- settaggi dei valori (se ne hai variato anche solo uno ruspetto a questo codice), oppure (anzi, è meglio) posta il tuo codice variato
in modo che possa replicare le operazioni.
08/26/2020 at 1:10 PM #1426001234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495// Definizione dei parametri del codiceDEFPARAM CumulateOrders = True // Posizioni cumulate attivate// 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 = 000000// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario "Flat After"DEFPARAM FLATAFTER = 235900//TIMEFRAME(default)// Impedisce al sistema di tradare in giorni specifici della settimanadaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0IF Not OnMarket THENSL = 0TP = 0ENDIF// Condizioni per entrare su posizioni longindicator1 = Average[3](Stochastic[5,3](close))c1 = (indicator1 CROSSES OVER 20)//TIMEFRAME(1 hour,default)indicator2 = ExponentialAverage[9](close)indicator3 = ExponentialAverage[21](close)c2 = (indicator2[1] > indicator3[1])//TIMEFRAME(default)IF (c1 AND c2) AND not daysForbiddenEntry THENIF SL = 0 OR ShortOnMarket THENSL = AverageTrueRange[7](close) / 6TP = SL * 3ENDIFBUY 1 SHARES AT MARKETSET TARGET PROFIT TPSET STOP LOSS SLENDIF// Condizioni per entrare su posizioni shortindicator4 = Average[3](Stochastic[5,3](close))c3 = (indicator4 CROSSES UNDER 80)//TIMEFRAME(1 hour,default)indicator5 = ExponentialAverage[9](close)indicator6 = ExponentialAverage[21](close)c4 = (indicator5[1] < indicator6[1])//TIMEFRAME(default)IF (c3 AND c4) AND not daysForbiddenEntry THENIF SL = 0 OR LongOnMarket THENSL = AverageTrueRange[7](close) / 6TP = SL * 3ENDIFSELLSHORT 1 SHARES AT MARKETSET TARGET PROFIT TPSET STOP LOSS SLENDIFTIMEFRAME (5minute,upDateOnClose)//************************************************************************//trailing stop functiontrailingstart = 20 //trailing will start @trailinstart points profittrailingstep = 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 movesIF newSL>0 AND close-newSL>=trailingstep*pipsize THENnewSL = newSL+trailingstep*pipsizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THENnewSL = tradeprice(1)-trailingstep*pipsizeENDIF//next movesIF newSL>0 AND newSL-close>=trailingstep*pipsize THENnewSL = newSL-trailingstep*pipsizeENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIFStrumento:Eur/usd
errore nella candela martedi 25 agosto 0:35
Ho cambiato lo stop loss ho messo atr/6, da quanto vedo lo stop loss dovrebbe essere 19/6=3.2 pips e quindi take profit 9.6 ma apre e chiude la posizione nello stesso momento e l ho notato sempre su eur/usd quella dopo alle 02:00 che nonostante i 4.2 pips me l’apre e chiude nella stessa candela sbagliando
08/26/2020 at 3:03 PM #142612Basta che aggiungi, alla fine del codice:
12Graph TP coloured(0,0,255,255)Graph SL coloured(255,0,0,255)per vedere, nel riquadro delle variabili del backtest, i loro valori candela per candela.
Credo tu stia utilizzando valori troppo piccoli, verifica i requisiti minimi, sia dello stop che del take profit, col broker.
08/26/2020 at 6:42 PM #14263908/26/2020 at 7:11 PM #142648La cosa migliore è provare ad inserire un ordine di vendita ed anche uno di acquisto dalla piattaforma IG, SENZA dare la conferma.
Vedi foto allegata, sul DAX € 25, lo SL minimo richisto è 5 punti, mentre il TP sembra non abbia limiti minimi.
Tieni sempre presente che i limiti (SL, TP e Margini) generalmente cambiano:
- intorno alla mezzanotte fino a circa un paio d’ore dopo
- quando ci sono eventi inaspettati
- quando ci sono notizie imprtanti in calendario.
08/27/2020 at 8:59 AM #14268108/27/2020 at 11:03 AM #142699Quale TF hai usato?
08/27/2020 at 11:56 AM #14270508/27/2020 at 9:15 PM #14276408/28/2020 at 10:21 AM #142794Ti avevo suggerito di aggiungere quelle due righe per le verifiche, ma forse non l’hai fatto o le hai interpretate male.
Come vedi dalla foto lo SL è di 1,2 pips. In alcuni casi addirittura 0,9. Ricorda che il prezzo standard delle valute (tipo EurUsd) viene espresso con 4 decimali, dove l’ultimo decimale rappresenta 1 pip (1/10000esimo). Mentre ormai da molti anni è stata aggiunta la 5a cifra decimale che vale 1/10mo di pip.
Quindi se tu vedi 12, non sono 12 pips, bensì 1,2.
Forse è più chiaro se quelle due righe le scrivi così:
12Graph TP/pipsize coloured(0,0,255,255)Graph SL/pipsize coloured(255,0,0,255)08/28/2020 at 1:15 PM #1428211234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798// Definizione dei parametri del codiceDEFPARAM CumulateOrders = True // Posizioni cumulate attivate// 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 = 000000// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario "Flat After"DEFPARAM FLATAFTER = 235900//TIMEFRAME(default)// Impedisce al sistema di tradare in giorni specifici della settimanadaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0IF Not OnMarket THENSL = 0TP = 0ENDIF// Condizioni per entrare su posizioni longindicator1 = Average[3](Stochastic[5,3](close))c1 = (indicator1 CROSSES OVER 20)//TIMEFRAME(1 hour,default)indicator2 = ExponentialAverage[9](close)indicator3 = ExponentialAverage[21](close)c2 = (indicator2[1] > indicator3[1])//TIMEFRAME(default)IF (c1 AND c2) AND not daysForbiddenEntry THENIF SL = 0 OR ShortOnMarket THENSL = AverageTrueRange[7](close)*30TP = SL * 3ENDIFBUY 1 SHARES AT MARKETSET TARGET PROFIT TPSET STOP LOSS SLENDIF// Condizioni per entrare su posizioni shortindicator4 = Average[3](Stochastic[5,3](close))c3 = (indicator4 CROSSES UNDER 80)//TIMEFRAME(1 hour,default)indicator5 = ExponentialAverage[9](close)indicator6 = ExponentialAverage[21](close)c4 = (indicator5[1] < indicator6[1])//TIMEFRAME(default)IF (c3 AND c4) AND not daysForbiddenEntry THENIF SL = 0 OR LongOnMarket THENSL = AverageTrueRange[7](close) / 6TP = SL * 3ENDIFSELLSHORT 1 SHARES AT MARKETSET TARGET PROFIT TPSET STOP LOSS SLENDIFTIMEFRAME (5minute,upDateOnClose)//************************************************************************//trailing stop functiontrailingstart = 20 //trailing will start @trailinstart points profittrailingstep = 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 movesIF newSL>0 AND close-newSL>=trailingstep*pipsize THENnewSL = newSL+trailingstep*pipsizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THENnewSL = tradeprice(1)-trailingstep*pipsizeENDIF//next movesIF newSL>0 AND newSL-close>=trailingstep*pipsize THENnewSL = newSL-trailingstep*pipsizeENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIFGraph TP/pipsize coloured(0,0,255,255)Graph SL/pipsize coloured(255,0,0,255)Ho capito solo ora cosa intendessi infatti ho subito cambiato i valori dell’atr e invece di dividere l ho moltiplicato per esempio a 30,ma sulla foto che ho messo vedo che comunque lo stop loss di quella candela è rimasto fermo a 1.5 sai spiegarmi il motivo in teoria dovrebbe essere circa 2.8
08/29/2020 at 11:41 PM #142945Il problema è DEFPARAM CumulateOrders = True, in quanto cumuli più posizioni e in quel caso lo SL ed il TP sono calcolati sulla media dei prezzi, in quanto ogni posizione ha un suo prezzo, mentre ProOrder può tenere solo un unico SL e TP.
Secondo me ti conviene fare tutti i test mettendo DEFPARAM CumulateOrders = False. Una volta completati i test di correttezza rimetti TRUE.
-
AuthorPosts
Find exclusive trading pro-tools on