Resultados de la prueba de expertos multidivisa - página 6

 
tol64:

¿Por qué te metes con esa segunda fuente?)

Si empiezo a responder sobre el fondo del asunto, la respuesta será algo así como"frases arrancadas por separado" o"no soy el tipo de persona que cree tener siempre la razón en todo". Eso ya está claro.

Sobre lo del ping-pong, es una posición un poco extraña. Te interesas por un tema, recibes respuestas y preguntas capciosas, y empiezas a desafiarlas o a rechazarlas. ¿Realmente necesita el tema o quién lo necesita? Personalmente no necesito estos resultados y el resultado de su elección me interesa poco. El tema en sí parece digno de atención, pero el afán polémico del autor crea dudas en la conveniencia de su mantenimiento.

 
marketeer:

¿Por qué habría de serlo? Usted tiene OnTimer como el tercer número allí. Ya ha sido citado en este tema: Sólo necesita implementar un método que realice correctamente la prueba. Hay uno. Esta es la función OnTimer () con un intervalo mínimo. Así que debes tener algo más en mente.

Antes de eso escribiste eso:

Pero no es lo mismo:
En realidad, se trata de "atrapar" el momento del tickeo de nuevas barras en todos los símbolos y es obvio que la mejor manera de hacerlo es utilizar el evento OnTick.


La cosa es que no estoy tratando de "atrapar" ticks en OnTimer(). En OnTimer() la comprobación de una nueva barra se realiza para cada símbolo por separado. Esta comprobación se realiza a un intervalo establecido en el temporizador (en segundos).

Un evento como un tick se recibe en la función OnTick() y en el esquema propuesto por Konstantin Gruzdev, es decir, en la función OnChartEvent(). En OnChartEvent() podemos rastrear cualquier evento, incluyendo la formación de una nueva barra en cualquier marco de tiempo.

No hay ningún problema con el temporizador. Ahora pruebo el EA multidivisa de la siguiente manera

1. Optimizo los parámetros de cada símbolo por separado, adjuntando el EA al símbolo cuyos parámetros se están optimizando. El proceso de optimización se realiza mediante la función OnTick(). En el momento de la optimización de los parámetros para un símbolo, todos los demás símbolos se desactivan, es decir, no participan en las pruebas y las operaciones se realizan sólo para el símbolo, cuyos parámetros se optimizan.

2. Después de la optimización de los parámetros para todos los símbolos, tenemos que probar todos los símbolos a la vez. Muevo el código a la función OnTimer() (por ahora), habilito el temporizador para las pruebas preliminares (60 segundos) y analizo el resultado obtenido. Si estoy satisfecho, pongo a punto el sistema de gestión del dinero y otros subsistemas. Luego cambio la prueba final (temporizador de 10 segundos) y recibo, en mi opinión, el resultado más preciso. Mi opinión y mis conclusiones se basan en los resultados de las pruebas de todos los métodos y en la comparación de estos resultados entre sí.

comercializadora:
Si es importante para usted, recomendaría comprobar con los desarrolladores cuál es el análogo del archivo fxt en Five. Ya he escrito que es probable que se generen diferentes bases de garrapatas para diferentes pruebas.

Es una suposición interesante. Incluso puede ser el caso. Por lo tanto, se agradecería una respuesta de los promotores.

 
No hay archivos fxt en mt5. Ahora los ticks no se escriben en un archivo, sino que se modelan a partir del historial de minutos sobre la marcha.

Resulta que generar ticks sobre la marcha es más rápido que leerlos del disco.
Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 
Renat:
No hay archivos fxt en mt5. Ahora los ticks no se escriben en un archivo, sino que se modelan a partir del historial de minutos sobre la marcha.

Resulta que generar ticks sobre la marcha es más rápido que leerlos del disco.
Hola Renat. Gracias por su respuesta. Esto es una gran noticia.
 
tol64:
Hola Renat. Gracias por su respuesta. Esto es una gran noticia.
No veo nada del otro mundo, resulta que en mt5 no se puede probar en ticks reales
 
Loky:
No veo nada del otro mundo, resulta que en mt5 no se puede probar en ticks reales
¿Te gustaría poder reunir tu propia base de ticks real o cogerla de algún sitio y hacer pruebas con ella o algo así?
 
Yedelkin:

Si empiezo a responder sobre el fondo, la respuesta será algo parecido a"frases extraídas por separado" o"no soy el tipo de persona que cree tener siempre la razón en todo". Eso ya está claro.

No. Parece que todavía no entiendes nada. Y ahora te lo explicaré por cuarta vez. Retomemos el diálogo.

Todo comenzó a partir de este momento:

Yedelkin:
Preste atención a la parte del código:

int OnInit()
{
if(iCustom("EURUSD",PERIOD_D1,"Spy Control panel MCM",ChartID(),0,CHARTEVENT_TICK) == INVALID_HANDLE)
   { Print("Ошибка установки шпиона на EURUSD"); return(true);}
   
if(iCustom("GBPUSD",PERIOD_D1,"Spy Control panel MCM",ChartID(),1,CHARTEVENT_TICK) == INVALID_HANDLE)
   { Print("Ошибка установки шпиона на GBPUSD"); return(true);}
}

Aquí se puede ver que se "articula" un determinado "panel de control espía MCM" en dos personajes diferentes. Así que tienes diferentes símbolos como fuentes de señal. Pero usted afirma que "operamos con el EURUSD", es decir, que la fuente de la señal es un mismo símbolo. Decidamos.

A eso te he respondido:

tol64:

Oh, esto se está acercando. Parece que ha aparecido una variante, en la que me equivoco)). Voy a pensar en ello durante un tiempo y escribiré sobre ello en detalle...

Pensamiento. Respuesta:

tol64:

Sólo opera con el EURUSD.

En mis pruebas considero el esquema de Konstantin Gruzdev - Implementación del modo multidivisa en MetaTrader 5. ))) Todo está definido. Los archivos adjuntos contienen el indicador MCM del panel de control espía y el asesor experto MCM del panel de control espía. Al instalar el Asesor Experto en un gráfico, puede ver cómo funciona. El registro muestra claramente los eventos especificados recibidos por el Asesor Experto desde diferentes símbolos. Todo está claro, nada está mezclado.

Ahora he intentado especificar en OnChartEvent() el símbolo del que se recibe el ID, pero esto no ha cambiado los resultados. He eliminado el segundo carácter de OnInit() para eliminar cualquier posibilidad de recibir los eventos equivocados. La prueba se realizó ahora con esta variante:

...

código

...

imágenes

...

Los resultados no coinciden. Ya no hay un segundo símbolo, las señales provienen únicamente del EURUSD. Pero, lamentablemente, esto no ha resuelto el problema.

El punto clave fue:"Ya no hay un segundo símbolo, las señales provienen únicamente del EURUSD. Pero eso, lamentablemente, no resolvió el problema."


¿Lo ves? La eliminación de la segunda fuente no resolvió el problema. La situación se ha simplificado y podrías haber dejado la segunda fuente, pero has seguido citando el ejemplo original en lugar de intentar resolver la siguiente pregunta. ¿Por qué teniendo un solo símbolo (fuente única) pero operando (en modo de prueba) desde otro símbolo, obtenemos variantes no idénticas?

Aquí está el post donde expresó esto:

Yedelkin:
Empecemos por la redacción correcta. En el ejemplo inicial, le habría gustado "operar en EURUSD". De hecho, los eventos de usuario provenían de dos símbolos, y en el manejador de eventos se llamaba a TradeSignalCounter()+TradePerformer() cuando se recibían eventos de cualquiera de estos dos símbolos. Podemos suponer que la cola de eventos estaba siempre llena.

Ahora has eliminado una de las fuentes de señal pero has introducido la comprobación "if(sparam == Symbol_01)" en el manejador de eventos por alguna razón. Pero la siguiente pregunta es diferente. A juzgar por el código, el esquema de Lizar se utiliza en el modo "Todos los ticks" y las funciones TradeSignalCounter()+TradePerformer() se llaman en cada tick desde la fuente de la señal (EURUSD). Interesante ya ha insinuado el posible desbordamiento de la cola de eventos. Pero quiero saber qué instrumento se utiliza como parámetro Symbol_01 de estas dos funciones, y si has intentado cambiar la periodicidad de los eventos en el esquema de Lizar.

Te lo he explicado por segunda vez (por alguna razón lo llamas "whisky"):

tol64:

Sí, eso es lo que quería hacer. Al fin y al cabo, cada acción que realizamos está provocada por nuestro deseo. En este caso, conseguí exactamente lo que quería. Es decir, sólo operamos con el EURUSD, porque la función TradePerformer() comprueba si está permitido operar con cada símbolo de la matriz de símbolos. Esta opción se encuentra en las variables externas y en ese momento el comercio con el símbolo GBPUSD estaba prohibido. Los eventos de usuario provenían de dos símbolos, pero en el manejador de eventos, de nuevo, la función TradePerformer() sólo permitía operar con el símbolo EURUSD. La función TradePerformer() también contiene una función que determina si se ha producido una nueva barra en un símbolo concreto, en este caso EURUSD. Tu suposición de que la cola de eventos siempre ha estado llena es correcta, pero en este caso todo se ha procesado por separado y un retraso de un tick no es significativo cuando se prueba en barras diarias.

La eliminación de una fuente de señal, la que no debía intervenir en las pruebas, sólo confirmó que todo se había hecho correctamente antes. La comprobación "if(sparam == Symbol_01)" se mantuvo desde que comprobé los resultados sin borrar una fuente de señal que no debía ser comprobada, pero de la que sí debía serlo. Esta comprobación resultó ser en realidad incluso superflua. Los resultados no cambiaron. El símbolo EURUSD se utiliza como parámetro Symbol_01. He intentado cambiar la frecuencia de los eventos pero no ha cambiado nada. Más exactamente, puedo decir que el modo de todos los ticks es el más preciso.

Punto clave:"Esta prueba resultó ser incluso superflua. Los resultados no cambiaron."
Es la segunda vez que "no te das cuenta" de que el problema no es lo que señalas, y es la segunda vez que te respondo lo mismo, pero aún más explícitamente.

Continuaste:

Yedelkin:
"...todo se hacía bien antes" - esto es de la categoría de la complacencia. Para empezar, estaba mal. Aparentemente, no le das importancia a un fenómeno como el "desbordamiento de la cola de eventos". Sobre todo cuando se trata de la transmisión de eventos a posteriori. Echa un vistazo a los materiales de referencia y al foro sobre el tema. La palabra clave es "cola".

Debido al hecho de que las funciones TradeSignalCounter()+TradePerformer() procesan los eventos de una sola fuente de señales, el estado de la cola y su posible desbordamiento no ha cambiado en absoluto. En otras palabras, la "prohibición de procesar eventos por el símbolo GBRUSD" no eliminó los eventos apropiados de la cola en absoluto. Por tercera vez, señalo el problema: "Ya se insinuó un posible desbordamiento en la cola de eventos" :) Si cree que sólo se trata de "una garrapata de retraso", ¿en qué se basan esas conclusiones?

"...En este caso todo se gestionó por separado". El problema es que en la versión original, el manejador de eventos llamaba a funciones cuando se recibían eventos de ambas fuentes de señal, y entonces esas funciones ya filtraban la señal de la fuente "innecesaria". Pero las funciones fueron llamadas cada (!) vez.

No importa realmente en qué período se prueba el manejador de eventos. Si el esquema de Lizar genera señales sobre una base de tic-tac, entonces están puntuando la cola de eventos sobre una base de tic-tac también, no una vez al día.

"Intenté cambiar la frecuencia de los eventos, pero no hubo ninguna diferencia. Más exactamente puedo decir que el modo de todos los ticks es el más preciso". ¿Podrías darme algunas capturas de pantalla comparativas de los modos de Lizar que no son de teca?

Y te he contestado por tercera vez de la forma más educada posible. Y los smileys que aparentemente percibiste como una burla, en realidad expresan mi amabilidad en relación a ti. Intentaré no ponerlos en otro sitio, ya que son muy ambiguos.

tol64:

¡Buenos días! ))

Aparte de esta frase extraída por separado, también escribí: "...nunca descarto la posibilidad de estar equivocado en algún sitio y siempre lo compruebo todo. Pero incluso después de las comprobaciones más duras, cuando a primera vista todo parece correcto, sigo sin poder descartar la posibilidad de que haya un error en alguna parte". Debo añadir que no soy el tipo de persona que cree tener siempre la razón en todo. )))

He echado un vistazo al tema del temporizador. Los puntos clave que destaqué son:

1. Mientras se procesa un evento, los otros no pueden ser procesados.

2. Si la pila de eventos se desborda, los eventos antiguos se eliminan de la cola sin ser procesados.

Tomémoslo en orden. Hay una enumeración de eventos:

...
código
...
Durante la inicialización, especificamos de qué personaje vamos a recibir el evento, y qué evento vamos a recibir:
...
código
...

Por lo tanto, aceptaremos el evento CHARTEVENT_TICK sólo de EURUSD. No hay otros símbolos.

La prueba ha comenzado. Cuando se produce cualquier evento, el programa entra en la función OnChartEvent(), declara matrices de variables para las señales de negociación y comprueba el evento. Si se trata de un evento personalizado, el programa determina la señal en TradeSignalCounter(), luego comprueba si se ha producido una nueva barra en la función TradePerformer() y luego decide otras condiciones dependiendo de esto. La función ha dejado de funcionar y empezará a hacerlo sólo cuando se produzca un evento en el gráfico del EURUSD. En otras palabras, una garrapata en este caso.

...

código
...

La ejecución de estas funciones es muy rápida. Ninguna cola de eventos tiene tiempo de desbordarse y no perderemos ningún evento importante. Y si la cola incluso se desborda y se pierden eventos, ¿qué nos perderemos? ¿Una garrapata, dos garrapatas, tres? ¿Y qué? Es insignificante en los bares de día.

¿Qué es lo que se está escogiendo en esta segunda fuente)))? Ya no hay una segunda fuente. Hay uno - EURUSD, pero el Asesor Experto opera en EURUSD desde el gráfico GBPUSD. Y los resultados son idénticamente erróneos. Un ejemplar. Es decir, son los mismos que si la segunda fuente está presente. )))

-----------

Mejor haz la prueba tú mismo, muestra los resultados de la prueba y escribe (brevemente) lo que hiciste para obtener los resultados correctos de la prueba, si por supuesto lo consigues. El experto más sencillo servirá para esta prueba. Entrada por cualquier condición, Stop Loss, Take Profit. Que sean las barras diarias de los últimos 10 años. Y lo verás por ti mismo. Algunos períodos coincidirán y otros no. Abra el cuadro de resultados y vea dónde está la discrepancia.

Y después de eso escribes:

Yedelkin:
Sobre el ping-pong - una posición un poco extraña. Te interesas por un tema determinado, recibes una respuesta y haces preguntas capciosas, y empiezas a rebatirlas o a descartarlas. ¿Realmente necesita el tema o quién lo necesita? No creo que nadie haga el trabajo por ti. Personalmente me importan un bledo los resultados y el resultado de sus elecciones me interesan poco. El tema en sí parece digno de atención, pero el fervor polémico del autor crea dudas en la conveniencia de su mantenimiento.

Luego hay preguntas.

1. ¿Qué tipo de reacción esperabas, si sigues repitiendo lo mismo, es decir, que ya es irrelevante y que ya te han contestado tres veces?

2. ¿Qué te hace pensar que estoy discutiendo? Si tomaste mis respuestas como una discusión, te equivocas, porque respondí y expliqué lo que estaba haciendo. Pero tú lo tomaste como un argumento porque te estabas discutiendo a ti mismo. )))

3. Nunca confío en otra persona para hacer mi trabajo.

4. No soy el único que necesita el tema, sino todos aquellos que se encuentren con este problema. Si no lo necesitas, ¿por qué has entrado en el diálogo? Mi fervor polémico fue sólo una consecuencia, la causa vino de ti.

---
No voy a analizar su comportamiento desde el punto de vista psicológico, de lo contrario usted y yo tendremos que salir volando de la atmósfera. Por lo tanto, será mejor que intentemos que el diálogo sea breve y vaya al grano. Pero si no lo necesitas, es mejor no continuar. Porque sí: Por favor, respete las normas. )))

 

Por supuesto, personalmente, no me interesa analizar las peculiaridades de la visión del mundo de otras personas. Ya he expuesto mis conclusiones sobre su fervor polémico más arriba. No hay nada que añadir.

 
Yedelkin:

... No hay nada que añadir.

Sí, mejor que no. De lo contrario, sólo se convertirá en una cháchara. Volvamos al tema.

---

Hice otra serie de pruebas. Los resultados de las pruebas presentadas anteriormente se obtuvieron sólo en el modo - Precios de apertura. En mi opinión, logré obtener resultados correctos en este modo sólo usando la función OnTimer(). Todos los demás métodos no mostraron los resultados correctos.

Esta vez, he realizado pruebas en el modo "Todos los ticks" a partir de principios de 2011. Al mismo tiempo, era interesante ver cuánto tiempo llevaría este o aquel método. Por ejemplo, en la prueba automática de Asesores Expertos para el Campeonato, un Asesor Experto debe ser probado en el modo "Todos los ticks" durante no más de 15 minutos. Para esta prueba, construí un simple Asesor Experto que opera con 12 pares de divisas. Las únicas condiciones que contiene son Stop Loss, Take Profit y Trailing Stop. No hay ampliación y reducción de posiciones, no hay sistema de gestión de dinero, el lote negociado es fijo (0,1). El Asesor Experto está escrito sin un solo ciclo, está simplificado al máximo. El horario de trabajo en todos los símbolos es H8.

Optimicé los parámetros para cada símbolo por separado, a su vez, utilizando OnTick(). No esperé a que terminara la optimización. Después de 100 ejecuciones, detuve la optimización y elegí no la mejor variante, sino la de menor riesgo.

La frecuencia del procesador con el que se realizaron las pruebas es de 2 GHz. Aquí se dice en qué hay que centrarse.

Además, sustituiré la palabra idéntico por casi idéntico, ya que el objetivo no es una coincidencia exacta, sino que al analizar el gráfico visualmente las diferencias no deberían ser llamativas.

---

Resultados de las pruebas:

La función OnTimer() se utilizó para la primera prueba porque dio resultados casi idénticos la última vez. Y ahora su resultado servirá de referencia para la comparación.

OnTimer()

El intervalo del temporizador es de 60 segundos.

La prueba duró 27 minutos.

---

Intervalo del temporizador 300 segundos:

Los resultados son casi idénticos. La duración de la prueba es de 26 minutos.

---

Intervalo del temporizador 28800 segundos - 8 horas (marco temporal utilizado).

Los resultados son casi idénticos. La duración de la prueba es de 25 minutos.

También hice pruebas con intervalos de 1800 y 3600 segundos, los resultados también son consistentes.

-----------

OnChartEvent()

El periodo de 1 minuto es CHARTEVENT_NEWBAR_M1.

Los resultados son casi idénticos. La duración de la prueba es de 37 minutos.

---

Periodo de 1 minuto - CHARTEVENT_NEWBAR_H1.

Los resultados son casi idénticos. Duración de la prueba: 27 minutos.

---

Periodo de 1 minuto - CHARTEVENT_NEWBAR_H8.

Los resultados son casi idénticos. La duración de la prueba es de 27 minutos.

----------

OnTick()

Los resultados son casi idénticos. La duración de la prueba es de 72 minutos.

-----------------

En el modo "Todos los ticks", todos los métodos mostraron resultados casi idénticos. OnTick() resultó ser la variante más larga. La duración de la prueba deOnTimer() y OnChartEvent() son casi idénticas.

Informe:

El resultado final:

En mi caso, incluso el Asesor Experto multidivisa más sencillo que opera con 12 pares de divisas en un marco temporal muy grande (H8) no puede ser colocado en el Campeonato, porque no pasará la prueba (15 minutos para la prueba). Tendremos que "cortar el apetito" o buscar métodos para optimizar al máximo el código del Asesor Experto.

---

Me pregunto si alguien ha conseguido una prueba rápida con 12 pares. ¿Cuánto dura la prueba?

 
tol64:

Me pregunto si alguien ha conseguido hacer una prueba rápida con 12 pares. ¿Cuánto dura la prueba?


3.
capr2011 en EURUSD:H1 cada tick 2011.01.01-2011.08.01


4. empezar
terminado en 3 min 21 seg


5. Estadísticas
1233 kb de archivos de registro
100 operaciones, 200 transacciones, beneficio 83043,82 USD
Razón de la queja: