creazione sistema in multi timeframe

Viewing 4 posts - 16 through 19 (of 19 total)
  • Author
    Posts
  • #127949 quote
    robertogozzi
    Moderator
    Master

    C’erano un sacco di errori nell’utilizzo delle variabili e nel loro utilizzo in TF diversi.

    Non puoi scrivere:

    ONCE TradeON = 0
    Timeframe(Weekly,UpdateOnClose)
    IF MieCondizioni1 THEN
       TradeON = 1
    ENDIF
    TIMEFRAME(default)
    IF MieCondizioni2 THEN
       TradeON = 0
    ENDIF

    perché alla prima riga, non avendo indicato nessun TF, è considerato TIMEFRAME(default) e solo in quel TF può essere variata la variabile TradeON, non alla riga 4 che fa parte del TIMEFRAME(Weekly), anche se puoi leggerla da qualunque TF.

    Quindi, una varibile può essere modificata solo nel TF in cui è stata creata, mentre può essere letta in qualsiasi altro TF.

    All’inizio del codice, tutto ciò che scrivi PRIMA di TIMEFRAME(xxx) fa parte di TIMEFRAME(default).

    Ai fini delle variabili create, TIMEFRAME(Daily,default) e TIMEFRAME(Daily,UpdateOnClose) sono considerati DIVERSI.

    Ai fini del numero massimo di TF utilizzati, invece, TIMEFRAME(Daily,default) e TIMEFRAME(Daily,UpdateOnClose) sono considerati UGUALI.

    Il massimo di TF utilizzabili in una strategia è 5 + quello di default.

    Esempio con un numero di TF di 6 (5 + 1 di default, che supponiamo sia quello a 1 minuto), VALIDO:

    TIMEFRAME(default)                   //TF default  1
    x0 = 1
    TIMEFRAME(1 Minute,UpdateOnClose)    //TF default  1
    x1 = 1
    TIMEFRAME(1 Minute,default)          //TF default  1
    x2 = 1
    TIMEFRAME(Daily,UpdateOnClose)       //TF Daily      2
    x3 = 1
    TIMEFRAME(Daily,default)             //TF Daily      2
    x4 = 1
    TIMEFRAME(4 hour,UpdateOnClose)      //TF 4h           3
    x5 = 1
    TIMEFRAME(4 hour,default)            //TF 4h           3
    x6 = 1
    TIMEFRAME(1 hour,UpdateOnClose)      //TF 1h             4
    x7 = 1
    TIMEFRAME(1 hour,default)            //TF 1h             4
    x12 = 1
    TIMEFRAME(30 Minute,UpdateOnClose)   //TF 30 minute        5
    x8 = 1
    TIMEFRAME(30 Minute,default)         //TF 30 minute        5
    x9 = 1
    TIMEFRAME(10 Minute,UpdateOnClose)   //TF 10 minute          6
    x10 = 1
    TIMEFRAME(10 Minute,default)         //TF 10 minute          6
    x11 = 1
    TIMEFRAME(default)                   //TF default  1
    XX = 1
    IF x0 and x1 and x2 and x3 and x4 and x5 and x6 and x7 and x8 and x9 and x10 and x11 and x12 and XX THEN
    ENDIF
    BUY 1 CONTRACT AT -close LIMIT

    questo esempio, invece NON è valido perchè utilizza più di 6 TF:

    TIMEFRAME(default)                               //TF default   1
    x0 = 1
    TIMEFRAME(1 Minute,UpdateOnClose)                //TF default   1
    x1 = 1
    TIMEFRAME(1 Minute,default)                      //TF default   1
    x2 = 1
    TIMEFRAME(Daily,UpdateOnClose)                   //TF Daily        2
    x3 = 1
    TIMEFRAME(Daily,default)                         //TF Daily        2
    x4 = 1
    TIMEFRAME(4 hour,UpdateOnClose)                  //TF 4h              3
    x5 = 1
    TIMEFRAME(4 hour,default)                        //TF 4h              3
    x6 = 1
    TIMEFRAME(1 hour,UpdateOnClose)                  //TF 1h                 4
    x7 = 1
    TIMEFRAME(1 hour,default)                        //TF 1h                 4
    x12 = 1
    TIMEFRAME(30 Minute,UpdateOnClose)               //TF 30 minute             5
    x8 = 1
    TIMEFRAME(30 Minute,default)                     //TF 30 minute             5
    x9 = 1
    TIMEFRAME(10 Minute,UpdateOnClose)               //TF 10 minute                6
    x10 = 1
    TIMEFRAME(10 Minute,default)                     //TF 10 minute                6
    x11 = 1
    TIMEFRAME(5 Minute,UpdateOnClose)                //TF 5 minute                    7
    x13 = 1
    TIMEFRAME(5 Minute,default)                      //TF 5 minute                    7
    x14 = 1
    TIMEFRAME(8 hour,UpdateOnClose)                  //TF 8h                             8
    x15 = 1
    TIMEFRAME(8 hour ,default)                       //TF 8h                             8
    x16 = 1
    TIMEFRAME(default)                               //TF default   1
    XX = 1
    IF x0 and x1 and x2 and x3 and x4 and x5 and x6 and x7 and x8 and x9 and x10 and x11 and x12 and x13 and x14 and x15 and x16 and XX THEN
    ENDIF
    BUY 1 CONTRACT AT -close LIMIT

    in realtà ho visto che in backtrest ne accetta fino a 7 di TF (6 + quello di default che è sul grafico), mentre quando ne inserisci 8, come nel mio secondo esempio, segnala che ne sono accettati max. 6 (5 + quello di default).

    L’ordine in cui si scrivono NON è importante, possono essere anche mischiati tra loro.

    Ogni TF può essere ripetuto anche più volte, in punti diversi della strategia, conta sempre come UN timeframe.

    #127950 quote
    robertogozzi
    Moderator
    Master

    Questo codice non ha errori, però ha qualche condizione messa in modo errato (logicamente, non sintatticamente), per cui non apre operazioni. Ho aggiunto GRAPH per vedere il valore della variabili candela per candela, alcune sono sempre 0:

    // STRATEGIA TREND FOLLOWER CHE OPERA SUL MERCATO SEGUENDO L'ANDAMENTO DEL SOTTOSTANTE SCELTO. SI UTILIZZANO 2 TIMEFRAME, 1 SETTIMANALE E L'ALTRO GIORNALIERO. SI OPERA SIA LONG CHE SHORT
    DEFPARAM CumulateOrders = false
    TIMEFRAME (default)
    // Definizione Variabili
    C=close
    //O=open
    //ONCE Stoploss = 0.1*equity
    // FINE DEFINIZIONE VARIABILI
    ONCE OrderSize = equity
    
    TIMEFRAME (weekly, Updateonclose)
    ONCE Capiniziale = 20000
    equity = Capiniziale + Strategyprofit
    ONCE TradeOn = 0
    ONCE TradeLongOn1 = 0
    ONCE TradeShortOn1 = 0
    PeriodoEnvelope = 2 // definisce il periodo SETTIMANALE DEL CALCOLO DELLE ENVELOPES
    ignored, EnvelopUp, EnvelopDown = call "Mio Envelope Weekly" [PeriodoEnvelope]
    MioRSI = RSI [2](C)
    
    // Condizione Weekly di flag sul Trade generico
    IF lowest[2](low) > 0.05*EnvelopDown OR lowest[2](low) < EnvelopDown THEN
    IF highest[2](high) < 0.05*EnvelopUp OR highest[2](high) > EnvelopUp THEN
    Tradeon = 1 // Se nelle x settimane precedenti il minimo dei minimi ha superato verso il basso la EnvelopDown oppure se è appena al di sotto di essa (il 5% al di sotto), E speculare per il massimo dei massimi, attiva il Trade
    ENDIF
    ENDIF
    
    // Condizione Weekly di flag sui TradeLong e TradeShort
    IF MioRSI > 0.02*lowest[5](MioRSI) AND MioRSI<40 THEN
    TradeLongOn1 = 1
    ELSIF MioRSI < 0.02*highest[5](MioRSI) AND MioRSI>60 THEN
    TradeShortOn1 = 1
    ENDIF
    
    
    TIMEFRAME (default)
    ONCE TradeLongOn2 = 0
    ONCE TradeShortOn2 = 0
    //
    MioPSAR = SAR[0.02,0.02,0.2]
    
    // Condizione Daily di flag sui TradeLong e TradeShort
    IF MioPSAR < C THEN
    TradeLongOn2 = 1
    ELSIF MioPSAR > C THEN
    TradeShortOn2 = 1
    ENDIF
    
    // Condizioni per entrare su posizioni LONG
    IF NOT LongOnMarket AND TradeOn AND TradeLongOn1 AND TradeLongOn2 THEN
    OrderSize = max(1,ROUND(equity/C))
    BUY OrderSize SHARES AT MARKET //OrderSize SHARES AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni LONG ed eventualmente incrementare la posizione, al verificarsi di alcune condizioni
    
    IF LongOnMarket AND MioPSAR > C THEN
    SELL AT MARKET //TOMORROWOPEN
    //BadTrades = 0 // Serve solo se si aggiunge l'ingresso frazionato
    ENDIF
    
    // Condizioni per entrare su posizioni SHORT
    IF NOT ShortOnMarket AND TradeOn AND TradeShortOn1 AND TradeShortOn2 THEN
    OrderSize = max(1,ROUND(equity/C))
    SELLSHORT OrderSize SHARES AT MARKET //OrderSize SHARES AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni SHORT
    IF ShortOnMarket AND MioPSAR < C THEN
    EXITSHORT AT MARKET
    //BadTrades = 0 // Serve solo se si aggiunge l'ingresso frazionato
    ENDIF
    
    
    //Stoploss = 0.05*equity // si introduce lo Stoploss
    
    Takeprofit = 0.20*equity
    SET TARGET $PROFIT Takeprofit
    graph TradeON
    graph TradeShortON1
    graph TradeShortON2
    graph TradelongON1
    graph TradelongON2
    Roberto90 thanked this post
    x-23.jpg x-23.jpg
    #128028 quote
    Roberto90
    Participant
    Average

    Ciao Roberto,

    grazie, sono riuscito a risolvere col backtest e ho cambiato diverse condizioni logiche che, come hai segnalato, erano del tutto errate. Comunque metto qui l’ultima versione del codice ed i risultati (a dir poco deludenti), nel caso possa essere utile a qualcuno.

    Grazie ancora dell’aiuto.

    // STRATEGIA TREND FOLLOWER CHE OPERA SUL MERCATO SEGUENDO L'ANDAMENTO DEL SOTTOSTANTE SCELTO. SI UTILIZZANO 2 TIMEFRAME, 1 SETTIMANALE E L'ALTRO GIORNALIERO. SI OPERA SIA LONG CHE SHORT
    //25/04/2020
    DEFPARAM CumulateOrders = false
    
    // DEFINIZIONE VARIABILI
    TIMEFRAME(default)
    
    C=close
    O=open
    ONCE OrderSize = equity
    ONCE Stoploss = 0.1*equity
    TradeLongOn1 = 0
    TradeShortOn1 = 0
    TradeLongOn2 = 0
    TradeShortOn2 = 0
    TradeLongOn3 = 0
    TradeShortOn3 = 0
    TradeLongOn4 = 0
    TradeShortOn4 = 0
    MioPSAR = SAR[0.02,0.02,0.2]
    MioRSI = RSI [14](C)
    MioDPO = DPO[10](C)
    MioMomentum = Momentum[10](C)
    
    TIMEFRAME (1 week,Updateonclose)
    ONCE Capiniziale = 20000
    equity = Capiniziale + Strategyprofit
    TradeOn = 0
    
    PeriodoEnvelope = 20 // definisce il periodo SETTIMANALE DEL CALCOLO DELLE ENVELOPES
    ignored, EnvelopUp, EnvelopDown = call "Mio Envelope Weekly" [PeriodoEnvelope]
    
    // FINE DEFINIZIONE VARIABILI
    
    // Condizione Weekly di flag sul Trade generico
    IF lowest[20](low) < 1.10*EnvelopDown OR lowest[20](low) < EnvelopDown THEN
    IF highest[20](high) > 1.10*EnvelopUp OR highest[20](high) > EnvelopUp THEN
    Tradeon = 1 // Se nelle x settimane precedenti il minimo dei minimi ha superato verso il basso la EnvelopDown oppure se è appena al di sotto di essa (il 5% al di sotto), E speculare per il massimo dei massimi, attiva il Trade
    ENDIF
    ENDIF
    
    TIMEFRAME (default)
    
    // Condizione 1 Daily di flag sui TradeLong e TradeShort
    IF MioRSI > 1.01*lowest[30](MioRSI) AND MioRSI<40 THEN
    TradeLongOn1 = 1
    ELSIF MioRSI < 1.01*highest[30](MioRSI) AND MioRSI>60 THEN
    TradeShortOn1 = 1
    ENDIF
    
    // Condizione 2 Daily di flag sui TradeLong e TradeShort
    IF C > MioPSAR THEN
    TradeLongOn2 = 1
    ELSIF C < MioPSAR THEN
    TradeShortOn2 = 1
    ENDIF
    
    //Condizione 3 Daily di flag sui TradeLong e TradeShort
    IF MioDPO > 1.01*lowest[30](MioDPO) AND MioDPO<0 THEN
    TradeLongOn3 = 1
    ELSIF MioDPO < 1.01*highest[30](MioDPO) AND MioDPO>0 THEN
    TradeShortOn3 = 1
    ENDIF
    
    // Condizione 4 Daily di flag sui TradeLong e TradeShort
    IF MioMomentum > 1.01*lowest[30](MioMomentum) AND MioMomentum<0 THEN
    TradeLongOn4 = 1
    ELSIF MioMomentum < 1.01*highest[30](MioMomentum) AND MioMomentum>0 THEN
    TradeShortOn4 = 1
    ENDIF
    
    // Condizioni per entrare su posizioni LONG
    IF NOT LongOnMarket AND TradeOn AND TradeLongOn1 AND TradeLongOn2 AND TradeLongOn3 AND TradeLongOn4 THEN
    OrderSize = max(1,ROUND(equity/C))
    BUY OrderSize SHARES AT MARKET //OrderSize SHARES AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni LONG ed eventualmente incrementare la posizione, al verificarsi di alcune condizioni
    
    IF LongOnMarket AND MioPSAR > C THEN
    SELL AT MARKET
    //BadTrades = 0 // Serve solo se si aggiunge l'ingresso frazionato
    ENDIF
    
    // Condizioni per entrare su posizioni SHORT
    IF NOT ShortOnMarket AND TradeOn AND TradeShortOn1 AND TradeShortOn2 AND TradeShortOn3 AND TradeShortOn4 THEN
    OrderSize = max(1,ROUND(equity/C))
    SELLSHORT OrderSize SHARES AT MARKET //OrderSize SHARES AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni SHORT
    IF ShortOnMarket AND MioPSAR < C THEN
    EXITSHORT AT MARKET
    //BadTrades = 0 // Serve solo se si aggiunge l'ingresso frazionato
    ENDIF
    
    
    Stoploss = 0.2*equity // si introduce lo Stoploss
    SET STOP $LOSS Stoploss
    Takeprofit = 0.20*equity
    SET TARGET $PROFIT Takeprofit
    
    200425_Equity.png 200425_Equity.png 200425_Report.png 200425_Report.png
    #128051 quote
    robertogozzi
    Moderator
    Master

    Io mi ero concentrato sul funzionamento ed il MTF e non sul codice.

    DPO è uno dei cosiddetti indicatori “repainting”, cioè che torna indietro a modificare i segnali quando ha le conferme. Questo lo rende inutilizzabile sulle strategie, dove non è possibile tornare indietro. Quindi il segnale che tu vedi sul grafico NON si è verificato in quella candela, ma in una candela successiva.

    Per questo avrai sicuramente risultati scarsi rispetto a quelli, apparentemente belli, che vedi sul grafico.

    Roberto90 thanked this post
Viewing 4 posts - 16 through 19 (of 19 total)
  • You must be logged in to reply to this topic.

creazione sistema in multi timeframe


Trading Generale: Analisi Mercati & Discrezionale

New Reply
Author
author-avatar
davidx78 @davidx78 Participant
Summary

This topic contains 18 replies,
has 4 voices, and was last updated by robertogozzi
5 years, 10 months ago.

Topic Details
Forum: Trading Generale: Analisi Mercati & Discrezionale
Language: Italian
Started: 11/20/2018
Status: Active
Attachments: 4 files
Logo Logo
Loading...