creazione sistema in multi timeframe
Forums › ProRealTime forum Italiano › Discussioni generiche sul trading › creazione sistema in multi timeframe
- This topic has 18 replies, 4 voices, and was last updated 4 years ago by robertogozzi.
Tagged: mtf
-
-
04/25/2020 at 1:06 AM #127949
C’erano un sacco di errori nell’utilizzo delle variabili e nel loro utilizzo in TF diversi.
Non puoi scrivere:
123456789ONCE TradeON = 0Timeframe(Weekly,UpdateOnClose)IF MieCondizioni1 THENTradeON = 1ENDIFTIMEFRAME(default)IF MieCondizioni2 THENTradeON = 0ENDIFperché 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:
12345678910111213141516171819202122232425262728293031TIMEFRAME(default) //TF default 1x0 = 1TIMEFRAME(1 Minute,UpdateOnClose) //TF default 1x1 = 1TIMEFRAME(1 Minute,default) //TF default 1x2 = 1TIMEFRAME(Daily,UpdateOnClose) //TF Daily 2x3 = 1TIMEFRAME(Daily,default) //TF Daily 2x4 = 1TIMEFRAME(4 hour,UpdateOnClose) //TF 4h 3x5 = 1TIMEFRAME(4 hour,default) //TF 4h 3x6 = 1TIMEFRAME(1 hour,UpdateOnClose) //TF 1h 4x7 = 1TIMEFRAME(1 hour,default) //TF 1h 4x12 = 1TIMEFRAME(30 Minute,UpdateOnClose) //TF 30 minute 5x8 = 1TIMEFRAME(30 Minute,default) //TF 30 minute 5x9 = 1TIMEFRAME(10 Minute,UpdateOnClose) //TF 10 minute 6x10 = 1TIMEFRAME(10 Minute,default) //TF 10 minute 6x11 = 1TIMEFRAME(default) //TF default 1XX = 1IF 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 THENENDIFBUY 1 CONTRACT AT -close LIMITquesto esempio, invece NON è valido perchè utilizza più di 6 TF:
123456789101112131415161718192021222324252627282930313233343536373839TIMEFRAME(default) //TF default 1x0 = 1TIMEFRAME(1 Minute,UpdateOnClose) //TF default 1x1 = 1TIMEFRAME(1 Minute,default) //TF default 1x2 = 1TIMEFRAME(Daily,UpdateOnClose) //TF Daily 2x3 = 1TIMEFRAME(Daily,default) //TF Daily 2x4 = 1TIMEFRAME(4 hour,UpdateOnClose) //TF 4h 3x5 = 1TIMEFRAME(4 hour,default) //TF 4h 3x6 = 1TIMEFRAME(1 hour,UpdateOnClose) //TF 1h 4x7 = 1TIMEFRAME(1 hour,default) //TF 1h 4x12 = 1TIMEFRAME(30 Minute,UpdateOnClose) //TF 30 minute 5x8 = 1TIMEFRAME(30 Minute,default) //TF 30 minute 5x9 = 1TIMEFRAME(10 Minute,UpdateOnClose) //TF 10 minute 6x10 = 1TIMEFRAME(10 Minute,default) //TF 10 minute 6x11 = 1TIMEFRAME(5 Minute,UpdateOnClose) //TF 5 minute 7x13 = 1TIMEFRAME(5 Minute,default) //TF 5 minute 7x14 = 1TIMEFRAME(8 hour,UpdateOnClose) //TF 8h 8x15 = 1TIMEFRAME(8 hour ,default) //TF 8h 8x16 = 1TIMEFRAME(default) //TF default 1XX = 1IF 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 THENENDIFBUY 1 CONTRACT AT -close LIMITin 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.
04/25/2020 at 1:19 AM #127950Questo 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:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283// 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 SHORTDEFPARAM CumulateOrders = falseTIMEFRAME (default)// Definizione VariabiliC=close//O=open//ONCE Stoploss = 0.1*equity// FINE DEFINIZIONE VARIABILIONCE OrderSize = equityTIMEFRAME (weekly, Updateonclose)ONCE Capiniziale = 20000equity = Capiniziale + StrategyprofitONCE TradeOn = 0ONCE TradeLongOn1 = 0ONCE TradeShortOn1 = 0PeriodoEnvelope = 2 // definisce il periodo SETTIMANALE DEL CALCOLO DELLE ENVELOPESignored, EnvelopUp, EnvelopDown = call "Mio Envelope Weekly" [PeriodoEnvelope]MioRSI = RSI [2](C)// Condizione Weekly di flag sul Trade genericoIF lowest[2](low) > 0.05*EnvelopDown OR lowest[2](low) < EnvelopDown THENIF highest[2](high) < 0.05*EnvelopUp OR highest[2](high) > EnvelopUp THENTradeon = 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 TradeENDIFENDIF// Condizione Weekly di flag sui TradeLong e TradeShortIF MioRSI > 0.02*lowest[5](MioRSI) AND MioRSI<40 THENTradeLongOn1 = 1ELSIF MioRSI < 0.02*highest[5](MioRSI) AND MioRSI>60 THENTradeShortOn1 = 1ENDIFTIMEFRAME (default)ONCE TradeLongOn2 = 0ONCE TradeShortOn2 = 0//MioPSAR = SAR[0.02,0.02,0.2]// Condizione Daily di flag sui TradeLong e TradeShortIF MioPSAR < C THENTradeLongOn2 = 1ELSIF MioPSAR > C THENTradeShortOn2 = 1ENDIF// Condizioni per entrare su posizioni LONGIF NOT LongOnMarket AND TradeOn AND TradeLongOn1 AND TradeLongOn2 THENOrderSize = max(1,ROUND(equity/C))BUY OrderSize SHARES AT MARKET //OrderSize SHARES AT MARKETENDIF// Condizioni per uscire da posizioni LONG ed eventualmente incrementare la posizione, al verificarsi di alcune condizioniIF LongOnMarket AND MioPSAR > C THENSELL AT MARKET //TOMORROWOPEN//BadTrades = 0 // Serve solo se si aggiunge l'ingresso frazionatoENDIF// Condizioni per entrare su posizioni SHORTIF NOT ShortOnMarket AND TradeOn AND TradeShortOn1 AND TradeShortOn2 THENOrderSize = max(1,ROUND(equity/C))SELLSHORT OrderSize SHARES AT MARKET //OrderSize SHARES AT MARKETENDIF// Condizioni per uscire da posizioni SHORTIF ShortOnMarket AND MioPSAR < C THENEXITSHORT AT MARKET//BadTrades = 0 // Serve solo se si aggiunge l'ingresso frazionatoENDIF//Stoploss = 0.05*equity // si introduce lo StoplossTakeprofit = 0.20*equitySET TARGET $PROFIT Takeprofitgraph TradeONgraph TradeShortON1graph TradeShortON2graph TradelongON1graph TradelongON21 user thanked author for this post.
04/25/2020 at 3:21 PM #128028Ciao 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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101// 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/2020DEFPARAM CumulateOrders = false// DEFINIZIONE VARIABILITIMEFRAME(default)C=closeO=openONCE OrderSize = equityONCE Stoploss = 0.1*equityTradeLongOn1 = 0TradeShortOn1 = 0TradeLongOn2 = 0TradeShortOn2 = 0TradeLongOn3 = 0TradeShortOn3 = 0TradeLongOn4 = 0TradeShortOn4 = 0MioPSAR = 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 = 20000equity = Capiniziale + StrategyprofitTradeOn = 0PeriodoEnvelope = 20 // definisce il periodo SETTIMANALE DEL CALCOLO DELLE ENVELOPESignored, EnvelopUp, EnvelopDown = call "Mio Envelope Weekly" [PeriodoEnvelope]// FINE DEFINIZIONE VARIABILI// Condizione Weekly di flag sul Trade genericoIF lowest[20](low) < 1.10*EnvelopDown OR lowest[20](low) < EnvelopDown THENIF highest[20](high) > 1.10*EnvelopUp OR highest[20](high) > EnvelopUp THENTradeon = 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 TradeENDIFENDIFTIMEFRAME (default)// Condizione 1 Daily di flag sui TradeLong e TradeShortIF MioRSI > 1.01*lowest[30](MioRSI) AND MioRSI<40 THENTradeLongOn1 = 1ELSIF MioRSI < 1.01*highest[30](MioRSI) AND MioRSI>60 THENTradeShortOn1 = 1ENDIF// Condizione 2 Daily di flag sui TradeLong e TradeShortIF C > MioPSAR THENTradeLongOn2 = 1ELSIF C < MioPSAR THENTradeShortOn2 = 1ENDIF//Condizione 3 Daily di flag sui TradeLong e TradeShortIF MioDPO > 1.01*lowest[30](MioDPO) AND MioDPO<0 THENTradeLongOn3 = 1ELSIF MioDPO < 1.01*highest[30](MioDPO) AND MioDPO>0 THENTradeShortOn3 = 1ENDIF// Condizione 4 Daily di flag sui TradeLong e TradeShortIF MioMomentum > 1.01*lowest[30](MioMomentum) AND MioMomentum<0 THENTradeLongOn4 = 1ELSIF MioMomentum < 1.01*highest[30](MioMomentum) AND MioMomentum>0 THENTradeShortOn4 = 1ENDIF// Condizioni per entrare su posizioni LONGIF NOT LongOnMarket AND TradeOn AND TradeLongOn1 AND TradeLongOn2 AND TradeLongOn3 AND TradeLongOn4 THENOrderSize = max(1,ROUND(equity/C))BUY OrderSize SHARES AT MARKET //OrderSize SHARES AT MARKETENDIF// Condizioni per uscire da posizioni LONG ed eventualmente incrementare la posizione, al verificarsi di alcune condizioniIF LongOnMarket AND MioPSAR > C THENSELL AT MARKET//BadTrades = 0 // Serve solo se si aggiunge l'ingresso frazionatoENDIF// Condizioni per entrare su posizioni SHORTIF NOT ShortOnMarket AND TradeOn AND TradeShortOn1 AND TradeShortOn2 AND TradeShortOn3 AND TradeShortOn4 THENOrderSize = max(1,ROUND(equity/C))SELLSHORT OrderSize SHARES AT MARKET //OrderSize SHARES AT MARKETENDIF// Condizioni per uscire da posizioni SHORTIF ShortOnMarket AND MioPSAR < C THENEXITSHORT AT MARKET//BadTrades = 0 // Serve solo se si aggiunge l'ingresso frazionatoENDIFStoploss = 0.2*equity // si introduce lo StoplossSET STOP $LOSS StoplossTakeprofit = 0.20*equitySET TARGET $PROFIT Takeprofit04/25/2020 at 6:29 PM #128051Io 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.
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on