Backtesting EA multidivisa

 

Actualmente estoy haciendo un backtesting de un EA de múltiples pares de div isas en el Probador de Estrategias de MT5 y obtengo diferentes resultados cuando lo conecto a diferentes pares de divisas. El EA opera en AUDUSD y GBPCHF.

Cuando lo adjunto al AUDUSD obtiene 10k de beneficio.

Cuando lo adjunto a GBPCHF obtiene más de 30k de beneficio.

Cuando lo adhiero al USDCHF (pensé que la función OnTick() reaccionaría tanto a los cambios del AUDUSD como del GBPCHF al seguir al USDCHF) obtiene alrededor de 17k de ganancias.

¿Es el problema de usar la función OnTick()? ¿O hay algún problema oculto en el backtesting de EAs multidivisa? ¿O es sólo un lío en mi código?

 
enivid:

Actualmente estoy haciendo un backtesting de un EA de múltiples pares de divisas en el Probador de Estrategias de MT5 y obtengo diferentes resultados al adjuntarlo a diferentes pares de divisas. El EA opera en AUDUSD y GBPCHF.

Cuando lo adjunto a AUDUSD obtiene 10k de beneficio.

Cuando lo adjunto a GBPCHF obtiene más de 30k de beneficio.

Cuando lo adhiero al USDCHF (pensé que la función OnTick() reaccionaría tanto a los cambios en el AUDUSD como en el GBPCHF al seguir al USDCHF) obtiene alrededor de 17k de ganancias.

¿Es el problema de usar la función OnTick()? ¿O hay algún problema oculto en el backtesting de EAs multidivisa? ¿O es sólo un lío en mi código?

Mejor, si copias el código aquí... tal vez te ayude.
 
El código no debería importar realmente. Por qué el Probador haría alguna diferencia para el par de div isas adjunto si todo el comercio se realiza en dos pares de divisas predefinidos y todo el comercio también se realiza en la apertura de la nueva barra, no cada tick.
 
enivid:

El código no debería importar realmente. Si todas las operaciones se realizan en dos pares de divisas predefinidos y todas las operaciones se realizan también en la apertura de una nueva barra, no en cada tick.

¿No es la función "on tick" sólo para la moneda del gráfico? Yo diría que para el 99% lo es. Supongo que se puede crear un bucle infinito refrescando las cotizaciones cada segundo o así para obtener ticks más precisos. Sin embargo, esto cambiaría toda la estructura de una aplicación.

 
enivid:

El código no debería importar realmente. Si toda la operativa se realiza sobre dos pares de divisas predefinidos y además toda la operativa se realiza en la apertura de una nueva barra, no en cada tick.

¿Tal vez debería probar OnBookEvent() en lugar de OnTick()? - OnTick() se activa sólo cuando llega el tick del símbolo actual.

OnBookEvent

La función OnBookEvent() es el manejador de BookEvent. BookEvent se genera para los Asesores Expertos sólo cuando la profundidad del mercado cambia. Debe ser de tipo void y tener un parámetro de tipo string:

voidOnBookEvent(conststring&symbol);

Para recibir eventos BookEvent para cualquier símbolo, sólo tiene que pre-suscribirse para recibir estos eventos para este símbolo usando la función MarketBookAdd() .Para dejar de recibir los eventos BookEvent de un determinado símbolo, llame a MarketBookRelease().

A diferencia de otros eventos, el evento BookEvent se transmite. Esto significa que si un Asesor Experto se suscribe a la recepción de eventos BookEvent utilizando MarketBookAdd, todos los demás Asesores Expertos que tengan el manejador OnBookEvent() recibirán este evento. Por lo tanto, es necesario analizar el nombre del símbolo, que se pasa al manejador como el parámetroconst string& symbol.

 

Yo experimento el mismo problema: haciendo backtesting de un EA multidivisa obtengo un comportamiento totalmente diferente dependiendo del símbolo que seleccione en el panel del probador de estrategias.

Esto es extremadamente molesto. ¿Rosh? ¿Alguien? ¿Puede comentar por favor?

Aunque el on tick se aplique sólo al gráfico seleccionado, tanto envid como yo estamos operando en la apertura de una nueva barra. En mi caso utilizo barras diarias por lo que aunque el tick de apertura de las nuevas barras en las distintas divisas se produzca en momentos diferentes no deberían producirse diferencias tan drásticas como las que experimento.

No incluyo mi EA por razones obvias, a ver si tenemos el mismo problema con el EA que se publicó aquí: https://www.mql5.com/en/articles/105.

Me gustaría saber si alguien está teniendo éxito en la construcción de un EA multidivisa y, en particular, que no sufra esta discrepancia.

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:

¿Tal vez debería probar OnBookEvent() en lugar de OnTick()? - OnTick() se activa sólo cuando llega el tick del símbolo actual.

OnBookEvent

La función OnBookEvent() es el manejador de BookEvent. BookEvent se genera para los Asesores Expertos sólo cuando la profundidad del mercado cambia. Debe ser de tipo void y tener un parámetro de tipo string:

voidOnBookEvent(conststring&symbol);

Para recibir eventos BookEvent para cualquier símbolo, sólo tiene que pre-suscribirse para recibir estos eventos para este símbolo usando la función MarketBookAdd() .Para dejar de recibir los eventos BookEvent de un determinado símbolo, llame a MarketBookRelease().

A diferencia de otros eventos, el evento BookEvent se transmite. Esto significa que si un Asesor Experto se suscribe a la recepción de eventos BookEvent utilizando MarketBookAdd, todos los demás Asesores Expertos que tengan el manejador OnBookEvent() recibirán este evento. Por lo tanto, es necesario analizar el nombre del símbolo, que se pasa al manejador como el parámetroconst string& symbol.

He intentado utilizar OnBookEvent() pero simplemente no funciona (al menos en backtesting). He utilizado MarketBookAdd() en la función OnInit() para mis dos pares.
 

Aquí hay un ejemplo. Usando el TEMA EA de https://www.mql5.com/en/articles/105 obtenemos los siguientes comportamientos diferentes.

Todo lo que necesitas es el EA exp_tema_es.mq5 y el indicador multistochastic_es.mq5

En este ejemplo utilicé el archivo de parámetros adjunto. El EA opera con los pares EURUSD, USDCHF y USDJPY (con estos parámetros).

Cuando se adjunta a EURUSD se obtiene

La equidad cuando se adjunta al EURUSD

cuando se adjunta a USDCHF obtendrá

usdchf

Entonces, con el USDJPY obtenemos

usdjpy

y mejor aún, al ejecutar el EA en AUDUSD el resultado

audusd

El mismo EA, el mismo timeframe (H1), los mismos pares negociados, las mismas fechas (2009.01.01-2009.03.01).

¿Es así como se supone que debe ser? y si es así, ¿puede alguien decirnos cuál es el significado de esto?

¿Estamos realmente preparados para el backtesting/optimización multidivisa?

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:

Aquí hay un ejemplo. Usando el TEMA EA de https://www.mql5.com/en/articles/105 obtenemos los siguientes comportamientos diferentes.

Todo lo que necesitas es el EA exp_tema_es.mq5 y el indicador multistochastic_es.mq5

En este ejemplo utilicé el archivo de parámetros adjunto. El EA opera con los pares EURUSD, USDCHF y USDJPY (con estos parámetros).

Cuando lo adjuntas a EURUSD obtienes


cuando se adjunta a USDCHF obtendrá


Entonces, con el USDJPY obtenemos

y mejor aún, al ejecutar el EA en AUDUSD el resultado

Mismo EA, mismo timeframe (H1), mismos pares negociados, mismas fechas (2009.01.01-2009.03.01).

¿Es así como se supone que debe ser? y si es así, ¿puede alguien decirnos cuál es el significado de esto?

¿Estamos realmente preparados para el backtesting/optimización multidivisa?




Hola,yo tuve el mismo problema(resultados diferentes), pero lo solucioné con el IsNewBar()

Estoy de acuerdo con baq, entonces que debemos hacer... obtener las cotizaciones y esta función lo hace

Sólo si IsNewBar(algún símbolo) entonces blah blah blah

para mi EA obtuve los mismos resultados adjuntando a diferentes símbolos.

el artículo del que saqué la función está aquí: 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:

Hola,he tenido el mismo problema(resultados diferentes), pero lo he solucionado con la función IsNewBar()

Estoy de acuerdo con baq, entonces que debemos hacer... obtener las comillas y esta función hace

Solo si IsNewBar(algún símbolo) entonces bla bla bla

para mi EA obtuve los mismos resultados adjuntando a diferentes símbolos.

el artículo del que saqué la función está aquí: https://www.mql5.com/en/articles/105

Ali, el ejemplo que mencioné arriba es el EA al que te refieres, que es la fuente de la función IsNewBar() que mencionaste, y ya la utiliza.

¿Cómo explicas esto?

 

Véase también el hilo de sincronización multidivisa enhttps://www.mql5.com/en/forum/1520.

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