Buonasera a tutti, chiedo un aiuto a chi può rispondermi….. ho provato ad impostare un trading system in multi timeframe ma non riesco ad inserire i riferimenti a 2 timeframe diversi nello stesso trading system….. provo a spiegarmi meglio: se volessi inserire come segnale di acquisto l’incrocio rialzista tra il prezzo e la media mobile a 20 periodi in un time frame a 15 minuti , e come condizione aggiuntiva l’incrocio rialzista tra il prezzo e la media mobile a 50 periodi ma su un time frame h1 , il sistema mi riconoscerebbe soltanto il time frame a 15 min e mi calcolerebbe si l’incrocio con la media mobile a 50 periodi ma sul timeframe h1 .
come posso ovviare a ciò? c’è qualche procedura o comando che dimentico?
grazie e buon lavoro,
David
Se conosci l’inglese puoi vedere questo video: https://www.youtube.com/watch?v=3ed-WFGG1mA&feature=youtu.be.
Ad ogni modo questo è un modello di come appare grosso modo una strategia MTF:
TIMEFRAME (Daily, updateonclose)
MediaD = average[200,0](close)
TIMEFRAME (4 hours, updateonclose)
Media4H = average[200,0](close)
TIMEFRAME (1 hour, updateonclose)
Media1H = average[200,0](close)
TIMEFRAME (default)
IF close > MediaD AND close > Media4H AND close > Media1H THEN //il prezzo deve essere superiore alla nedia 200 di ciascun TF
BUY 1 CONTRACT AT MARKET
ENDIF
Per ciascun TF puoi mettere le condizioni che vuoi.
Non si possono usare gli setssi nomi di variabili in più TF per la loro creazione o modifica, mentre possono essere lette da ogni TF.
L’indicazione UPDATEONCLOSE significa che le variabili usate in quel TF possono essere aggiornate solo alla chiusura della rispettiva candela, mentre se viene omesso o viene indicato DEFAULT l’aggiornamento viene effettuato ad ogni esecuzione della strategia (quindi ad ogni chiusura della candle relativa al TF di default, quello principale). Quest’ultima possibilità può essere usate per verificare il valore di una media mentre si sta formando, ad esempio, su un TF a 4 ore.
Il TF principale per ProOrder è quello PIU’ BASSO che deve essere usato come default al momento del lancio della strategia, cioè quello che in quel momento è sul grafico aperto. Tutti gli altri TF devono essere MULTIPLI del TF di default. Quindi se usi un TF Daily e 1 ora, puoi usare come default 1 minuto, 10 minuti o 5 secondi, ma NON 7 minuti in quanto sia il daily che il grafico orario NON sono multipli di 7 minuti.
Questo è un esempio, in inglese, che ho scritto qualche mese fa https://www.prorealcode.com/topic/cowabunga-on-dax-with-multiple-time-frames/.
Buonasera,
vorrei chiedere se è già possibile utilizzare questa feature in reale.
Grazie in anticipo
Devi chiedere l’attivazione del supporto MTF, via email, al tuo broker.
Buongiorno Roberto,
grazie per il servizio svolto, l’ho trovato davvero utile.
Sto implementando la mia prima strategia multitimeframe, su grafico settimanale e giornaliero, ma non riesco a far partire il backtest, ovvero quando vado su “probacktesta il mio sistema” non succede nulla. Il backtest lo faccio sul grafico giornaliero e mi sembra che i parametri siano corretti, come indicato nella guida al seguente link https://www.prorealcode.com/blog/learning/approach-multi-timeframe-trading-prorealtime/
Mi puoi aiutare a capire a cosa può essere dovuto?
Grazie in anticipo
// 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
O=open
ONCE Capiniziale = 20000
equity = Capiniziale + Strategyprofit
ONCE OrderSize = equity
ONCE Stoploss = 0.1*equity
ONCE TradeOn = 0
ONCE TradeLongOn1 = 0
ONCE TradeShortOn1 = 0
ONCE TradeLongOn2 = 0
ONCE TradeShortOn2 = 0
PeriodoEnvelope = 2 // definisce il periodo SETTIMANALE DEL CALCOLO DELLE ENVELOPES
// FINE DEFINIZIONE VARIABILI
TIMEFRAME (weekly, Updateonclose)
EnvelopCentral, 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 (daily, default)
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 = 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 = 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, solo se si è investito il 100% del capitale. Lo Stoploss è pari al 10% del capitale investito
SET STOP $LOSS Stoploss
Takeprofit = 0.20*equity
SET TARGET $PROFIT Takeprofit
Dove è valorizzata la variabile C?
La riga
ROUND(equity/C)
sarebbe meglio tu la scrivessi così, per essere sicuri che non sia zero:
max(1,ROUND(equity/C))
Scusami, ho cancellato la prima riga per sbaglio, quando ho copiato il codice, ma nella strategia è presente ed è alla prima riga di codice
<pre class=”lang:probuilder decode:true “>C=close
Ho corretto anche la riga, come mi hai indicato. Il problema è che quando faccio partire il Backtest non compare nè un popup di errore, nè parte il Backtest. Potrebbe essere che, per fare backtest multitimefrime, sia necessario uno specifico abbonamento?
Grazie ancora del supporto
No, non serve un abbonamento particolare.
Verifica le date di inizio e fine.
Più tardi lo provo anch’io.
Ciao Roberto,
poi hai avuto modo di provare il sistema? Io ho riprovato anche oggi, ma non va. Ho cambiato anche le date in diverse combinazioni, ma niente. Ti allego anche l’indicatore personalizzato, nel caso tu riesca a provarlo e a farlo girare.
Grazie
Non va, ma ti ha segnalato errori?
No nulla, è per questo che non torna. Errori di scrittura non dovrebbero esserci e il resto mi sembra ok. Non mi compare nè una finestra di errore nè una segnalazione.
A me segnala due errori:
- la variabile O (open) non è usata
- la variabile envelopcentral non è usata
manca qualche altra riga?
No sono dei refusi da modifiche precedenti, non le uso queste variabili. Ma a te dà un errore quando lanci il backtest?
Grazie
Mi da alcuni errori, per favore posta l’ultimo codice che hai usato e che non ti segnala nessun errore.
Lo trovi qui di seguito.
Grazie
// 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
// Definizione Variabili
C=close
O=open
ONCE Capiniziale = 20000
equity = Capiniziale + Strategyprofit
ONCE OrderSize = equity
ONCE Stoploss = 0.1*equity
ONCE TradeOn = 0
ONCE TradeLongOn1 = 0
ONCE TradeShortOn1 = 0
ONCE TradeLongOn2 = 0
ONCE TradeShortOn2 = 0
PeriodoEnvelope = 2 // definisce il periodo SETTIMANALE DEL CALCOLO DELLE ENVELOPES
// FINE DEFINIZIONE VARIABILI
TIMEFRAME (weekly, Updateonclose)
EnvelopCentral, 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 (daily, default)
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 = 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 = 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