Discusión sobre el artículo "Optimización móvil continua (Parte 3): Método de adaptación del robot al optimizador automático"

 

Artículo publicado Optimización móvil continua (Parte 3): Método de adaptación del robot al optimizador automático:

El tercer artículo actuará como puente entre los dos anteriores, pues en él se analizará el mecanismo de interacción con la DLL descrita en el primer artículo y los objetos para la descarga analizados en el segundo. Además, se mostrará el proceso de creación de un envoltorio para la clase que se importa desde DLL y se formará un archivo XML con la historia de transacciones, así como un método de interacción con los datos del envoltorio.

Una vez analizado en el primer artículo el mecanismo del trabajo con los archivos XVL de un informe, hemos pasado al proceso de formación de los propios informes, al que está dedicado este artículo. En el presente artículo, hemos analizado el mecanismo de formación de los informes, comenzando por los objetos que descargan la historia de transacciones, y terminando con los objetos que crean el propio informe. Durante el análisis de los objetos que participan en la creación del informe, hemos analizado con especial cuidado la parte computacional, mostrando las fórmulas de los coeficientes principales; asimismo, hemos descrito con el mayor detalle los posibles problemas que podrían surgir en los cálculos.

Como ya hemos dicho en la introducción a este artículo, los objetos aquí descritos, constituyendo un puente entre el mecanismo de descarga de datos y el mecanismo encargado de su creación, no son menos importantes que estos, por lo que merecen una descripción detallada. Aparte de las funciones que guardan los archivos con los informes de las transacciones, también hemos descrito las clases que participan en la descarga de los informes XML, además de describir las plantillas de los robots que utilizarán esta funcionalidad automáticamente. Asimismo, hemos descrito el mecanismo de adición de la funcionalidad creada a cualquier algoritmo ya existente, lo cual permitirá a los usuarios del optimizador automático optimizar sus desarrollos tantos antiguos, como nuevos.

Autor: Andrey Azatskiy

 

¡Estimado autor! ¡El trabajo que ha realizado es colosal! El nivel de programación también es impresionante. ¡Pero como resultado no se puede utilizar! Para ello, hay que recorrer todo el ciclo de artículos, recopilar archivos dispares, compilar, encontrar los que faltan, pensar si se han actualizado en nuevos artículos...? No cabe duda de que un trabajo así merece que su resultado se recoja en un solo lugar.

Mientras tanto, por lo que veo, nadie ha apreciado aún la importancia real (de comerciante) de este trabajo sobre este recurso. Pero no es de extrañar, todavía tiene que crecer a tal nivel. Sería bueno para mt5 para crecer hasta un WFO normal, pero no quiere.... Y además, ¡qué espacio se abre para crear complementos! Lo que más quiero es implementar la validación cruzada, dividir la historia en K partes, tirar cada una de ellas a su vez, optimizar sobre las restantes, luego comprobar sobre la que se ha tirado, y así K veces. Cualquier hipótesis que parta del "conjunto de parámetros estables" más sencillo puede comprobarse con mucha más fiabilidad que con la opción deslizante habitual.

 
Kristian Kafarov:

¡Estimado autor! ¡El trabajo que ha realizado es colosal! El nivel de programación también es impresionante. ¡Pero como resultado no se puede utilizar! Para ello, hay que recorrer todo el ciclo de artículos, recopilar archivos dispares, compilar, encontrar los que faltan, pensar si se han actualizado en nuevos artículos...? No cabe duda de que un trabajo así merece ser reunido en un solo lugar.

Mientras tanto, por lo que veo, nadie ha apreciado aún la importancia real (de comerciante) de este trabajo en este recurso. Pero no es de extrañar, todavía tiene que crecer a tal nivel. Sería bueno para mt5 para crecer hasta un WFO normal, pero no quiere.... Y además, ¡qué espacio se abre para crear complementos! Lo que más quiero es implementar la validación cruzada, dividir la historia en K partes, tirar cada una de ellas a su vez, optimizar en las que quedan, luego comprobar en la que se ha tirado, y así K veces. Cualquier hipótesis que parta del "conjunto de parámetros estables" más sencillo puede comprobarse con mucha más fiabilidad que con la opción deslizante habitual.

Gracias por una crítica tan halagadora. Tengo planeados 3 artículos más en los que se describirá el propio autooptimizador. En uno de los artículos serán instrucciones específicas para el uso y el propio programa. Tantos artículos del hecho de que no es cierto sólo publicará el resultado del trabajo realizado sin explicar cómo se logra. Por el momento se describe la parte de la carga de los informes de optimización y cómo se forman, en los próximos artículos (estoy trabajando en ellos ahora), se describe el propio optimizador - es un programa escrito en C# que ejecuta la optimización en el terminal. Por cierto, en este programa el algoritmo de optimización en sí se coloca en la parte de la interfaz, por lo que tan pronto como el ciclo de artículos se completará, usted será capaz de poner en práctica su idea, para ello tendrá que implementar la interfaz IOptimiser en C # y conectar el constructor del optimizador personalizado, acerca de cómo se hace - se le dirá en detalle en uno de los próximos artículos.

Respecto al hecho de que todo está en lugares dispares - intentaré en los artículos en los que estoy trabajando exponer todo el código, aunque romperá el hilo de la narración y quizás publique el código en github, pero los archivos compilados todavía no se publicarán, porque el proceso de compilación no es tan difícil. Si alguien tiene alguna pregunta sobre la compilación y el uso del proyecto, siempre estoy dispuesto a ayudar.

 
Andrey Azatskiy:

Tengo previstos 3 artículos más en los que se describirá el propio autooptimizador.

Recientemente he llegado al punto en el que necesito automatizar el proceso. He desarrollado un método de optimización que da un resultado positivo estable en el historial de OOS, pero requiere largos cálculos y mucho trabajo manual de un solo tipo. Y la optativa de deslizamiento no es la única solución al problema. Uno de los retos más acuciantes es cómo conseguir que el genetista amplíe los rangos de valores en los que se asienta con los mejores resultados, afine los rangos en los que se estrecha y realice una nueva opta. Esto dista mucho de establecer un rango suficientemente amplio para todos los parámetros a la vez y limitarse a elegir los mejores. En mis robots, el número de parámetros es tal que una opta así llevaría semanas o no podría explorar el espacio de parámetros con suficiente detalle.

Así que ahora pienso: ¿debo esperarte o buscar soluciones yo mismo?) Definitivamente debería empezar a ocuparme de tu proyecto.

Por el momento, al lanzar un Asesor Experto que llama al panel, mi terminal simplemente se bloquea, dejando la última entrada:

2020.02.02 22:45:07.187 Terminal exit with code 0

Dicho esto, cada inicio de terminal comienza con la nota:

2020.02.02.02 23:35:17.747 IPC failed to initialise IPC, with message:

2020.02.02.02 23:35:17.748 Terminal IPC dispatcher not started

Al parecer, ¿impide que el programa funcione? El sistema es 64x, en todo caso.
 
Kristian Kafarov:

Recientemente, me he dado cuenta de que necesito automatizar el proceso. He desarrollado un método de optimización que da un resultado positivo estable en el historial de OOS, pero requiere largos cálculos y mucho trabajo manual monótono. Y la opta deslizante no es la única solución al problema. Uno de los retos más acuciantes es cómo conseguir que el genetista amplíe los rangos de valores en los que se asienta con los mejores resultados, afine los rangos en los que se estrecha y realice una nueva opta. Esto dista mucho de establecer un rango suficientemente amplio para todos los parámetros a la vez y limitarse a elegir los mejores. En mis robots, el número de parámetros es tal que una opta de este tipo llevaría semanas o no exploraría el espacio de parámetros con suficiente detalle.

Ahora pienso: ¿esperarte o buscar soluciones yo mismo?) Definitivamente debería empezar a ocuparme de tu proyecto.

Por el momento, al lanzar un Asesor Experto que llama al panel, mi terminal simplemente se bloquea, dejando la última entrada:

2020.02.02 22:45:07.187 Terminal exit with code 0

Al mismo tiempo, cada inicio de terminal comienza con la nota:

2020.02.02.02 23:35:17.747 IPC failed to initialise IPC, with message:

2020.02.02.02 23:35:17.748 Terminal IPC dispatcher no iniciado

Al parecer, ¿impide que el programa funcione? El sistema es 64x, en todo caso.

Si optimizas en tu sistema a mano, seguro que podrás programarlo en mi autooptimizador.
Respecto al error - ¿empezó a ocurrir después de conectar mis archivos, o son tus robots los que afectan al terminal de tal manera? No he observado tal problema, y ya he lanzado robots en más de un ordenador con los añadidos que ya están en los artículos. También tengo un sistema de 64 bits.

Si usted está escribiendo acerca de mi última serie de artículos (sobre la gestión de la optimización), es mejor tratar con él directamente en su ordenador en el modo de depuración, ya que es poco probable que reproduzca el problema, en cualquier caso, la última vez cuando lancé el proyecto no sucedió.

 
Andrey Azatskiy:

En cuanto al error, ¿empezó a producirse después de conectar mis archivos, o son tus robots los que afectan así al terminal?

Ni siquiera llegó a los robots, sólo trato de llamar a su panel de los dos primeros artículos mediante la ejecución de la OptimisationManagerExtention Asesor Experto. Después de eso el terminal se bloquea.

 
Kristian Kafarov:

Ni siquiera llegó a los robots, sólo trato de llamar a su panel de los dos primeros artículos mediante la ejecución de la OptimisationManagerExtention Asesor Experto. Después de que el terminal se bloquea.

Entonces - como ya he dicho, es necesario mirar a un equipo y un ejemplo específico. No puedo decir a primera vista cuál puede ser el problema, no he tratado con ese proyecto desde hace mucho tiempo. Al menos necesitas tener mas de un terminal instalado en tu ordenador y la dll con la interfaz grafica estaba en el directorio MQL5/Libraries.

En el actual proyecto Auto Optimiser, he quitado los graficos del terminal y debe ejecutarse como un programa normal, no como un robot, asi que no habra problemas de ese tipo, al menos durante 3 meses o mas lo he estado probando y he ejecutado mas de un robot. Y lo del proyecto antiguo, como te he dicho, tienes que mirar un ejemplo concreto, no te puedo decir cual es el motivo.

 
Kristian Kafarov:

Ni siquiera llegó a los robots, sólo trato de llamar a su panel de los dos primeros artículos mediante la ejecución de la OptimisationManagerExtention Asesor Experto. Después de que el terminal se bloquea.

A propósito ahora recompilado y corrió el viejo proyecto desde cero. Todo funcionó para mí. Así que no puedo reproducir el error.

 
Kristian Kafarov:

Sobre todo, quiero implementar la validación cruzada para dividir la historia en K partes, cada una de ellas volcada a su vez, optimizar en las restantes, luego comprobar en la volcada, y así K veces.

Seleccionado no funcionará en el caso general. Usted tiene que establecer dos parámetros de entrada en su TS que definen un intervalo no comercial (volcado). Entonces es real.


Para el caso general puede crear un símbolo personalizado, que se obtiene a partir del original tirando el intervalo.

 
fxsaber:

El resaltado no funcionará en el caso general. Necesita establecer dos parámetros de entrada en su TS que definan un intervalo de no negociación (expulsión). Entonces será realista.

Para el caso general puede crear un símbolo personalizado, que se obtiene a partir del original desechando el intervalo.

Así es exactamente como iba a hacerlo. Sólo un parámetro es suficiente, porque la división va en partes iguales. El parámetro especifica el número del segmento a descartar. Bueno, también puedes añadir el parámetro "número de partes".

Con las herramientas de Andrew, puede dar a la terminal maestra una tarea para realizar k optimizaciones, cada una de las cuales tendrá su propio parámetro "número de sección de validación". Luego, sin embargo, tendrás que escribir un complemento para reunir las estadísticas.

Todo sería cien veces más sencillo si el probador tuviera la posibilidad de enumerar forzosamente algunos parámetros por completo durante la genética. Entonces los resultados optativos pueden ser analizados dividiéndolos por el parámetro "número de parcela".

Otra opción es la función OnTesterDeinit(). Ya he implementado un WFO completo en ella, y usted puede fácilmente hacer validación cruzada por cualquier criterio allí. Pero será "correcta" sólo en el caso de una búsqueda completa, porque se hace enumerando los cuadros de toda la sección de prueba. Una enumeración completa no es realista en la mayoría de los casos. Y si ejecutamos la genética, el conjunto de marcos será injusto, porque en el proceso de opta selecciona los resultados también por las secciones que queremos hacer secciones de prueba. Aunque cuanto daño real hará esto es una incógnita. Si la proporción de la longitud del sitio de prueba a la longitud total es pequeña, la genética todavía debe tener un número suficiente de variantes en las que el sitio de prueba resulta ser un asco. Y después de toda una variante tan común, es posible dejar un sitio más, que no participó en ella, y comprobar el resultado en él.

 
Kristian Kafarov:

Eso es exactamente lo que pretendía. Un solo parámetro es suficiente, porque se divide en partes iguales. El parámetro especifica el número de la sección a descartar. También puede añadir el parámetro "número de partes".

Con las herramientas de Andrew, puede dar al terminal maestro una tarea para realizar k optimizaciones, cada una de las cuales tendrá su propio parámetro "número de sección de validación". Entonces, sin embargo, tendrás que escribir un complemento para reunir las estadísticas.

Todo sería cien veces más sencillo si el probador tuviera la posibilidad de enumerar forzosamente algunos parámetros por completo durante la genética. Entonces se podrían analizar los resultados optativos dividiéndolos por el parámetro "número de parcela".

También existe la herramienta fxsaber, que ayudará con el resto.

Validate
Validate
  • www.mql5.com
Боевые торговые советники время от времени перенастраиваются по разным причинам через Тестер на исторических данных. Однако, результат таких периодических настроек сводится к наблюдению за неизвестным - будущая торговля. Аргументировать и обосновать целесообразность таких действий в отношении того или иного торгового советника довольно...