Backtesting dell'EA multi-valuta

 

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?

 
enivid:

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?

Meglio, se copi il codice qui... forse ti aiuterà.
 
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 della nuova barra, non ogni tick.
 
enivid:

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.

 
enivid:

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.

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
 
investeo:

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.

Ho provato a usare OnBookEvent() ma semplicemente non funziona (almeno nel backtesting). Ho usato MarketBookAdd() nella funzione OnInit() per entrambe le mie coppie.
 

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

Equità quando attaccato a EURUSD

quando si attacca a USDCHF si ottiene

usdchf

Quindi, con USDJPY otteniamo

usdjpy

e meglio ancora, quando si esegue l'EA su AUDUSD il risultato

audusd

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?

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
 
trendick:

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

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
 
Ali2e7a:

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?

 

Vedi anche il thread sulla sincronizzazione multi-valuta suhttps://www.mql5.com/en/forum/1520.

Multi-Currency synchronization
  • www.mql5.com
Here some tests results and below details:.
Motivazione: