ATR stop loss e take profit

Viewing 15 posts - 1 through 15 (of 17 total)
  • Author
    Posts
  • #142403 quote
    Ciurno981
    Participant
    Average

    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

    #142408 quote
    robertogozzi
    Moderator
    Master

    Eccolo:

    IF MieCondizioniLong THEN
       BUY 1 CONTRACT AT MARKET
       SL = AverageTrueRange[7](close) / 3
       TP = SL * 3
       SET TARGET PROFIT TP
       SET STOP   LOSS    SL
    ENDIF
    #142554 quote
    Ciurno981
    Participant
    Average
    // Definizione dei parametri del codice
    DEFPARAM 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 settimana
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
     
    // Condizioni per entrare su posizioni long
    indicator1 = 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 THEN
    BUY 1 SHARES AT MARKET
    ENDIF
     
    // Condizioni per entrare su posizioni short
    indicator4 = 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 THEN
    SELLSHORT 1 SHARES AT MARKET
    ENDIF
    TIMEFRAME (5minute,upDateOnClose)
    //************************************************************************
    //trailing stop function
    trailingstart = 20 //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
    //************************************************************************
    // Stop e target
    IF (c1 AND c2)And not OnMarket THEN
    BUY 1 CONTRACT AT MARKET
    SL = AverageTrueRange[7](close) / 3
    TP = SL * 3
    SET TARGET PROFIT TP
    SET STOP   LOSS    SL
    ENDIF

    Credo 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à.

    #142592 quote
    robertogozzi
    Moderator
    Master

    Questo dovrebbe andare:

    // Definizione dei parametri del codice
    DEFPARAM 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 settimana
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    IF Not OnMarket THEN
    SL = 0
    TP = 0
    ENDIF
     
    // Condizioni per entrare su posizioni long
    indicator1 = 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 THEN
    IF SL = 0 OR ShortOnMarket THEN
    SL = AverageTrueRange[7](close) / 3
    TP = SL * 3
    ENDIF
    BUY 1 SHARES AT MARKET
    SET TARGET PROFIT TP
    SET STOP   LOSS   SL
    ENDIF
     
    // Condizioni per entrare su posizioni short
    indicator4 = 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 THEN
    IF SL = 0 OR LongOnMarket THEN
    SL = AverageTrueRange[7](close) / 3
    TP = SL * 3
    ENDIF
    SELLSHORT 1 SHARES AT MARKET
    SET TARGET PROFIT TP
    SET STOP   LOSS   SL
    ENDIF
    TIMEFRAME (5minute,upDateOnClose)
    //************************************************************************
    //trailing stop function
    trailingstart = 20 //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

    Se 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.

    #142600 quote
    Ciurno981
    Participant
    Average
    // Definizione dei parametri del codice
    DEFPARAM 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 settimana
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
     
    IF Not OnMarket THEN
    SL = 0
    TP = 0
    ENDIF
     
    // Condizioni per entrare su posizioni long
    indicator1 = 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 THEN
    IF SL = 0 OR ShortOnMarket THEN
    SL = AverageTrueRange[7](close) / 6
    TP = SL * 3
    ENDIF
    BUY 1 SHARES AT MARKET
    SET TARGET PROFIT TP
    SET STOP   LOSS   SL
    ENDIF
     
    // Condizioni per entrare su posizioni short
    indicator4 = 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 THEN
    IF SL = 0 OR LongOnMarket THEN
    SL = AverageTrueRange[7](close) / 6
    TP = SL * 3
    ENDIF
    SELLSHORT 1 SHARES AT MARKET
    SET TARGET PROFIT TP
    SET STOP   LOSS   SL
    ENDIF
    TIMEFRAME (5minute,upDateOnClose)
    //************************************************************************
    //trailing stop function
    trailingstart = 20 //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

    Strumento: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

    #142612 quote
    robertogozzi
    Moderator
    Master

    Basta che aggiungi, alla fine del codice:

    Graph 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.

    #142639 quote
    Ciurno981
    Participant
    Average

    SAi dove posso trovare questi requisiti,ho cercato sul broker ig e anche sulle domande ma non ho trovato niente

    #142648 quote
    robertogozzi
    Moderator
    Master

    La 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.
    x-12.jpg x-12.jpg
    #142681 quote
    Ciurno981
    Participant
    Average

    Si ho controllato e su eur/Usd è di 2 punti quindi 2 pips, e il mio stop loss anche quelle che abbiamo controllato non va mai sono i 2 pips, quindi non è quello

    #142699 quote
    robertogozzi
    Moderator
    Master

    Quale TF hai usato?

    #142705 quote
    Ciurno981
    Participant
    Average

    Quello a 5 minuti

    #142764 quote
    Ciurno981
    Participant
    Average

    Secondo me il problema sta nel atr prima quando mettevo stop e profit fissi andava bene,ma non so potrebbe mettere le istruzioni del atr solo periodo e valore da prendere?tralasciando il resto?

    #142794 quote
    robertogozzi
    Moderator
    Master

    Ti 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ì:

    Graph TP/pipsize coloured(0,0,255,255)
    Graph SL/pipsize coloured(255,0,0,255)
    x-13.jpg x-13.jpg
    #142821 quote
    Ciurno981
    Participant
    Average
    // Definizione dei parametri del codice
    DEFPARAM 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 settimana
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
     
    IF Not OnMarket THEN
    SL = 0
    TP = 0
    ENDIF
     
    // Condizioni per entrare su posizioni long
    indicator1 = 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 THEN
    IF SL = 0 OR ShortOnMarket THEN
    SL = AverageTrueRange[7](close)*30
    TP = SL * 3
    ENDIF
    BUY 1 SHARES AT MARKET
    SET TARGET PROFIT TP
    SET STOP   LOSS   SL
    ENDIF
     
    // Condizioni per entrare su posizioni short
    indicator4 = 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 THEN
    IF SL = 0 OR LongOnMarket THEN
    SL = AverageTrueRange[7](close) / 6
    TP = SL * 3
    ENDIF
    SELLSHORT 1 SHARES AT MARKET
    SET TARGET PROFIT TP
    SET STOP   LOSS   SL
    ENDIF
    TIMEFRAME (5minute,upDateOnClose)
    //************************************************************************
    //trailing stop function
    trailingstart = 20 //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
    
    Graph 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

    2020-08-28-1.png 2020-08-28-1.png
    #142945 quote
    robertogozzi
    Moderator
    Master

    Il 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.

Viewing 15 posts - 1 through 15 (of 17 total)
  • You must be logged in to reply to this topic.

ATR stop loss e take profit


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
Ciurno981 @ciurno981 Participant
Summary

This topic contains 16 replies,
has 2 voices, and was last updated by robertogozzi
5 years, 5 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 08/24/2020
Status: Active
Attachments: 3 files
Logo Logo
Loading...