Attualmente sto facendo il backtesting di un EA multi-currency-pair nel MT5 Strategy Tester e ottengo risultati diversi quando lo collego a diverse coppie di valute. L'EA fa trading su AUDUSD e GBPCHF.
Quando lo collego a AUDUSD ottiene 10k di profitto.
Quando lo collego a GBPCHF ottiene più di 30k di profitto.
Quando lo collego a USDCHF (pensavo che la funzione OnTick() reagisse ai cambiamenti di AUDUSD e GBPCHF quando si segue USDCHF) ottiene circa 17k di profitto.
È il problema di usare la funzione OnTick()? O c'è qualche problema nascosto nel backtesting degli EA multivaluta? O è solo un po' di confusione nel mio codice?
Il codice non dovrebbe avere molta importanza. Perché il Tester dovrebbe fare qualche differenza per la coppia di valute allegata se tutto il trading viene fatto su due coppie di valute predefinite e tutto il trading viene anche eseguito all'apertura della nuova barra, non ogni tick.
La funzione "on tick" non è solo per la valuta del grafico? Direi che per il 99% lo è. Immagino che si possa creare un ciclo infinito che aggiorna le quotazioni ogni secondo circa per ottenere tick più precisi. Questo però cambierebbe l'intera struttura di un'applicazione.
Il codice non dovrebbe avere molta importanza. Perché il Tester dovrebbe fare qualche differenza per la coppia di valute allegata se tutto il trading viene fatto su due coppie di valute predefinite e tutto il trading viene eseguito anche all'apertura di nuove barre, non ad ogni tick.
Forse dovresti provare OnBookEvent() invece di OnTick()? - OnTick() si attiva solo quando arriva il tick del simbolo corrente.
OnBookEvent
La funzione OnBookEvent() è il gestore di BookEvent. BookEvent viene generato per gli Expert Advisors solo quando cambia la profondità del mercato. Deve essere di tipo void e avere un parametro di tipo stringa:
voidOnBookEvent(conststring&symbol); |
Per ricevere gli eventi BookEvent per qualsiasi simbolo, è sufficiente preiscriversi per ricevere questi eventi per questo simbolo utilizzando la funzione MarketBookAdd() .Per cancellarsi dalla ricezione degli eventi BookEvent per un particolare simbolo, chiamare MarketBookRelease() .
A differenza di altri eventi, l'evento BookEvent è trasmesso. Questo significa che se un Expert Advisor si iscrive a ricevere gli eventi BookEvent usando MarketBookAdd, tutti gli altri Expert Advisor che hanno il gestore OnBookEvent() riceveranno questo evento. È quindi necessario analizzare il nome del simbolo, che viene passato al gestore come parametroconst string& symbol.
Sperimento lo stesso problema: facendo il backtesting di un EA multivaluta ottengo un comportamento totalmente diverso a seconda del simbolo che seleziono nel pannello dello strategy tester.
Questo è estremamente fastidioso. Rosh? Qualcuno può commentare per favore?
Anche se l'on tick si applica solo al grafico selezionato, sia io che envid operiamo sull'apertura di una nuova barra. Nel mio caso uso barre giornaliere quindi anche se il tick di apertura delle nuove barre nelle varie valute avviene in tempi diversi non dovrebbero verificarsi differenze così drastiche come quelle che riscontro io.
Non includo il mio EA per ovvi motivi. Vediamo se abbiamo lo stesso problema con l'EA che è stato pubblicato qui: https://www.mql5.com/en/articles/105.
Sarei molto felice di sentire da chiunque stia avendo successo nel costruire un EA multivaluta e in particolare non soffra di questa discrepanza.
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Forse dovresti provare OnBookEvent() invece di OnTick()? - OnTick() si attiva solo quando arriva il tick del simbolo corrente.
OnBookEvent
La funzione OnBookEvent() è il gestore di BookEvent. BookEvent viene generato per gli Expert Advisors solo quando cambia la profondità del mercato. Deve essere di tipo void e avere un parametro di tipo stringa:
voidOnBookEvent(conststring&symbol); |
Per ricevere gli eventi BookEvent per qualsiasi simbolo, è sufficiente preiscriversi per ricevere questi eventi per questo simbolo utilizzando la funzione MarketBookAdd() .Per cancellarsi dalla ricezione degli eventi BookEvent per un particolare simbolo, chiamare MarketBookRelease() .
A differenza di altri eventi, l'evento BookEvent è trasmesso. Questo significa che se un Expert Advisor si iscrive a ricevere gli eventi BookEvent usando MarketBookAdd, tutti gli altri Expert Advisor che hanno il gestore OnBookEvent() riceveranno questo evento. E' quindi necessario analizzare il nome del simbolo, che viene passato al gestore come parametroconst string& symbol.
Ecco un esempio. Usando il TEMA EA di https://www.mql5.com/en/articles/105 otteniamo i seguenti comportamenti diversi.
Tutto ciò che serve è l'EA exp_tema_it.mq5 e l'indicatore multistochastic_it.mq5
In questo esempio ho usato il file param set allegato. L'EA negozia le coppie EURUSD, USDCHF e USDJPY (con questi parametri).
Quando si attacca a EURUSD si ottiene
quando si attacca a USDCHF si ottiene
Quindi, con USDJPY otteniamo
e meglio ancora, quando si esegue l'EA su AUDUSD il risultato
Stesso EA, stesso timeframe (H1), stesse coppie scambiate, stesse date (2009.01.01-2009.03.01).
È questo il modo in cui dovrebbe essere? e se è così, qualcuno può dirci qual è il significato di questo?
Siamo davvero pronti per il backtesting/ottimizzazione multivaluta?
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Ecco un esempio. Usando il TEMA EA di https://www.mql5.com/en/articles/105 otteniamo i seguenti comportamenti diversi.
Tutto ciò di cui hai bisogno è l'EA exp_tema_it.mq5 e l'indicatore multistochastic_it.mq5
In questo esempio ho usato il file param set allegato. L'EA negozia le coppie EURUSD, USDCHF e USDJPY (con questi parametri).
Quando lo attacchi a EURUSD ottieni
quando si attacca a USDCHF si ottiene
Quindi, con USDJPY otteniamo
e meglio ancora, quando si esegue l'EA su AUDUSD il risultato
Stesso EA, stesso timeframe (H1), stesse coppie scambiate, stesse date (2009.01.01-2009.03.01).
È questo il modo in cui dovrebbe essere? e se è così, qualcuno può dirci qual è il significato di questo?
Siamo davvero pronti per il backtesting/ottimizzazione multivaluta?
Ciao, ho avuto lo stesso problema (risultati diversi), ma l'ho risolto con IsNewBar()
Sono d'accordo con baq, quindi cosa dovremmo fare? ottenere le quotazioni e questa funzione fa
Solo se IsNewBar(qualche simbolo) allora blah blah blah
per il mio EA ho ottenuto gli stessi risultati attaccando a diversi simboli.
l'articolo da cui ho preso la funzione è qui: https://www.mql5.com/en/articles/105
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Ciao, ho avuto lo stesso problema (risultati diversi), ma l'ho risolto con IsNewBar()
Sono d'accordo con baq, quindi cosa dovremmo fare? Ottenere le virgolette e questa funzione fa
Solo se IsNewBar(qualche simbolo) allora blah blah blah
per il mio EA ho ottenuto gli stessi risultati attaccando a diversi simboli.
L'articolo da cui ho preso la funzione è qui: https://www.mql5.com/en/articles/105
Ali, l'esempio che ho citato sopra è l'EA a cui ti riferisci, che è la fonte della funzione IsNewBar() che hai menzionato, e già la usa.
Come spieghi questo?
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Attualmente sto facendo il backtesting di un EA multi-currency-pair nel MT5 Strategy Tester e ottengo risultati diversi quando lo collego a diverse coppie di valute. L'EA fa trading su AUDUSD e GBPCHF.
Quando lo collego a AUDUSD ottiene 10k di profitto.
Quando lo collego a GBPCHF ottiene più di 30k di profitto.
Quando lo collego a USDCHF (pensavo che la funzione OnTick() reagisse ai cambiamenti di AUDUSD e GBPCHF quando si segue USDCHF) ottiene circa 17k di profitto.
È il problema di usare la funzione OnTick()? O c'è qualche problema nascosto nel backtesting degli EA multivaluta? O è solo un po' di confusione nel mio codice?