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?
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.
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.
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
¿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.
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
cuando se adjunta a USDCHF obtendrá
Entonces, con el USDJPY obtenemos
y mejor aún, al ejecutar el EA en AUDUSD el resultado
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?
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
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
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
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?
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
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?