Discusión sobre el artículo "Optimización paralela con el método de enjambre de partículas (Particle Swarm Optimization)"
¿Está justificada la comprobación de unicidad y el almacenamiento de la base de parámetros? ¿Se ha medido la degradación de la velocidad del algoritmo?
Teniendo en cuenta que, por regla general, durante la optimización se utiliza un espacio de búsqueda enorme y la probabilidad de variantes repetidas es extremadamente pequeña, y en caso de espacios de búsqueda pequeños es más racional realizar una búsqueda completa.
ZЫ Gracias al autor por la base de reflexión.
ZZY Yo no entendía muy bien cómo se resuelve la cuestión de la carga "suave" de los agentes en un tamaño fijo de la colonia (o población) sin tiempo de inactividad, mientras que estoy releyendo el artículo.
El artículo muestra algunos momentos no trabajados desde el lado de MT5. Por ejemplo, la obtención de valores de parámetros no optimizados en OnTesterInit sin DLL. Y la misma comisión.
Sería genial añadir al código fuente la posibilidad de habilitar (vía macro) la lectura de todos los parámetros del Tester vía DLL. Hay soluciones listas.
Otro deseo es la generación de opt-file a partir de PSO-passes.
Será necesario comparar esta solución y el GA estándar en términos de rendimiento y calidad. No debería ser difícil para cualquier TC no syndicator (basado en las fuentes del artículo, ya que es un estilo universal).
El artículo es estupendo. Pero no para principiantes.
Lectura final.
Hay demasiado código para la tarea de sustituir al optimizador estándar, demasiados inclusivos, ¿quién lo entenderá? - Desafortunadamente, para la gran mayoría de los lectores el artículo permanecerá más allá de la comprensión.
¿Cómo se puede coger cualquier Asesor Experto y atornillarle una librería PSO con el mínimo esfuerzo?
Idealmente, el algoritmo de optimización debería ser una entidad completamente separada, para que no tengas que entrar en él cada vez que necesites escribir un nuevo Asesor Experto (cualquier algoritmo a optimizar).
Además, ¿qué ajustes del algoritmo son aceptables en la mayoría de los casos prácticos? - El autor no dio una respuesta a esta pregunta. Y, si la mente inquisitiva del lector quiere optimizar los parámetros del algoritmo utilizando el mismo algoritmo, no será posible hacerlo de inmediato, porque el código no está aislado.
Por favor, no lo considere un gruñón, pero no hay ninguna herramienta lista para usar sin código innecesario para tareas específicas.
Lo terminé.
Hay demasiado código para la tarea de sustituir al optimizador estándar, demasiados inclusivos, ¿quién lo entenderá? - Por desgracia, para la inmensa mayoría de los lectores, el artículo seguirá siendo incomprensible.
¿Cómo puedes coger cualquier Asesor Experto y atornillarle una librería PSO con el mínimo esfuerzo?
Idealmente, el algoritmo de optimización debería ser una entidad completamente separada, para que no tengas que entrar en él cada vez que necesites escribir un nuevo Asesor Experto (cualquier algoritmo a optimizar).
Además, ¿qué ajustes del algoritmo son aceptables en la mayoría de los casos prácticos? - El autor no dio una respuesta a esta pregunta. Y si la mente inquisitiva del lector quiere optimizar los parámetros del algoritmo con el mismo algoritmo, no será posible hacerlo de inmediato, porque el código no está aislado.
Por favor, no lo consideren un gruñón, pero no hay ninguna herramienta lista para usar sin código innecesario para tareas específicas.
Por supuesto, no se puede abrazar lo inmenso. Se ha presentado la segunda iteración de la herramienta de código abierto (la primera, no paralelizada, se publicó antes en el blog). Está lista en el sentido de que ya han resuelto por ti dónde poner el código y cómo funcionará. Estoy de acuerdo en que todavía no hay un producto en una caja. Pero estaría a la venta en el mercado. Lo que se presenta aquí es un kit de bricolaje con una instrucción lista.
En cuanto a los includnics - se añadieron no de una buena vida, sino porque no hay maneras similares en casa para hacer todo lo mismo (y necesario). Y es muy bueno que todas estas cosas de rutina ya están listos en forma de includniks, que sólo necesitan ser conectados (para lo cual muchas gracias a fxsaber-u). Es extraño quejarse en el sitio de algo-trading sobre la principal forma de evitar la duplicación de trabajo. Si estos includers no estuvieran ahí, habríamos tenido que hacer todo el proyecto desde cero. Y es mejor tener includniks que batniks. En general, no hay dependencias de programas y DLL de terceros. Y no se puede implementar ninguna (ninguna) alternativa al método de optimización incorporado mediante código pequeño.
En cuanto al ajuste de los parámetros PSO, es un problema abierto para cualquier método de optimización. En particular, para el GA incorporado hay algunos ajustes fijos que los usuarios no pueden cambiar, y por eso mucha gente se queja de este mismo punto, y tienen que encargarte soluciones personalizadas basadas en GA. Así que resulta que la ausencia de ajustes es mala, y cuando están ahí, también es mala, porque nos los diste y ahora no sabemos qué hacer con ellos. Y qué hacer con ellos es esto: investigar para cada tarea específica. Pedir parámetros listos para alguna caja negra desconocida, que es el experto de alguien, es como pedir parámetros ideales para este experto (sin optimización). ¿Y por qué necesitamos entonces la propia optimización? Porque no es tan sencillo: ni buscar los parámetros de un experto, ni buscar los metaparámetros de un algoritmo de optimización concreto. Lo que pides es como pedir una configuración de red neuronal ya hecha para datos que nadie ha visto todavía. No existen configuraciones óptimas para la mayoría de los expertos == casos prácticos.
Como punto de partida, podemos tomar el paralelismo con los AG que se hace en el artículo: si el usuario ha ejecutado el AG 1000 veces, que fije el recuento de grupos en 1000, si había 100 generaciones en el AG - que sean 100 ciclos PSO, y si había 100 individuos en la población, que el tamaño del enjambre sea también de 100.
En cuanto a includnics - se añaden no de una buena vida, sino porque no hay formas estándar similares para hacer todas las mismas cosas (y necesario). Y es muy bueno que todas estas cosas de rutina ya están disponibles listos en forma de includniks, que sólo necesitan ser conectados (gracias a fxsaber para eso). Es extraño quejarse en un sitio de algo-trading sobre la principal forma de evitar la duplicación de trabajo. Si estos includers no estuvieran ahí, habríamos tenido que hacer todo el proyecto desde cero. Y es mejor tener includniks que batniks. En general, no hay dependencias de programas y DLL de terceros. Y no se puede implementar ninguna (ninguna) alternativa al método de optimización incorporado mediante código pequeño.
No tiene sentido duplicar la funcionalidad del probador estándar en forma de funciones comerciales virtuales (al menos no veo el punto, este trabajo ya ha sido hecho para nosotros por chicos inteligentes y muy bien pagados de MQ), pero para hacer una adición, una extensión de la funcionalidad - sí.
negrita - tal vez, de hecho.
En cuanto al ajuste de los parámetros de PSO, es un problema abierto para cualquier método de optimización. En particular, para el GA incorporado hay algunos ajustes fijos que los usuarios no pueden cambiar, y es por eso que muchas personas se quejan de este mismo punto, y tienen que pedirte soluciones personalizadas basadas en GA. Así que resulta que la ausencia de ajustes es mala, y cuando están ahí, también es mala, porque nos los diste y ahora no sabemos qué hacer con ellos. Y qué hacer con ellos es esto: investigar para cada tarea específica. Pedir parámetros listos para alguna caja negra desconocida, que es el experto de alguien, es como pedir parámetros ideales para este experto (sin optimización). ¿Y por qué necesitamos entonces la propia optimización? Porque no es tan sencillo: ni buscar los parámetros de un experto, ni buscar los metaparámetros de un algoritmo de optimización concreto. Lo que pides es como pedir una configuración de red neuronal ya hecha para datos que nadie ha visto todavía. No existen configuraciones óptimas para la mayoría de los expertos == casos prácticos.
Como punto de partida, podemos tomar el paralelismo con los AG realizado en el artículo: si el usuario ha ejecutado el AG 1000 veces, que establezca el recuento de grupos en 1000, si hubo 100 generaciones en el AG - que sean 100 ciclos PSO, y si hubo 100 individuos en la población, que el tamaño del enjambre sea también 100.
La red neuronal preparada y el algoritmo de optimización no son lo mismo, la red neuronal requiere entrenamiento en datos específicos y depende de la pureza, integridad y relevancia de los datos, pero el algoritmo de optimización no debería depender de estos factores de ninguna manera, no debería importarle si entrenar la red neuronal (optimizar), o encontrar los parámetros óptimos de sí mismo en un conjunto de problemas de prueba.
En cualquier caso, mis comentarios sobre el artículo son puramente prácticos, no de principio. Cualquier punto de vista sobre el problema de la optimización tiene derecho a existir. Tú lo ves así, yo lo veo de otra manera, lo cual es bueno.
En el mundo moderno nadie necesita diseñadores de "constrúyelo tú mismo", todo el mundo necesita soluciones ya hechas, los Mercedes y otros Audis no se compran para terminarlos, sino para disfrutarlos... o al menos debería presentarse una forma de atornillar la solución a los proyectos existentes del cliente.
;)
artículo interesante
No me gustó la aplicación - la vinculación de comercio virtual con el probador,
tal vez funciona como se pretende, pero imho, la aplicación para la optimización debe ser ya sea completamente con la ayuda de comercio virtual ( Virtual.mqh ) - entonces será en línea auto-optimización,
o implementación utilizando las posibilidades del probador de estrategia terminal (OnTesterInit()). - obtendriamos un GA alternativo para el tester, en la implementacion actual es dificil asumir como funciona el tester de estrategias.
gracias por el interesante material y la implementacion del software, puede ser util.
Responderé por orden.
Recordar los hash de las combinaciones calculadas es opcional - se puede excluir de la fuente si se desea. La presencia de esta comprobación no debería ralentizar mucho el proceso en comparación con la velocidad de cálculo de la propia operación.
La enumeración completa de parámetros sólo tiene sentido para espacios realmente pequeños, pero entre ellos y millones de combinaciones hay toda una capa de casos de uso. Por ejemplo, usted necesita para ejecutar la optimización en 10000 combinaciones, una búsqueda completa tomará 1 hora, pero usted quiere ver una estimación aproximada en unos pocos minutos. En este caso, es obvio que necesita una forma rápida de optimización, y las combinaciones duplicadas son muy probables. Y detectándolas, podemos acelerar el procesamiento.
La carga de los agentes se deja al probador. Los pases comerciales se distribuyen uniformemente por término medio (el número es igual y la complejidad se promedia debido a la aleatorización).
Me gustaría añadir ficheros de opciones, pero no consigo hacerlo todo a la vez. Si metes todas las opciones, el resultado nunca verá la luz.
No me gustaría utilizar DLLs y programas externos, por así decirlo, por diseño.
Utilizar funciones virtuales de comercio tiene mucho sentido: son mucho más rápidas que las incorporadas. Esto en primer lugar. En segundo lugar, le permiten cambiar los parámetros muchas veces en un bucle dentro de una pasada (dentro de un grupo PSO). Si no fuera por esto, cada pase por separado tendría que ser sincronizado con el grupo(que se ha convertido en una entidad externa en relación con el programa ) - y esto sigue siendo posible, de nuevo, ya sea a través de programas externos o a través de archivos compartidos. Y habría nuevos superfrenos. Pero en tercer y último lugar, y esto es lo más importante: cuando se utilizan pases de probador regulares sin virtualización, es imposible atornillar su propio algoritmo de optimización para vivir dentro de MQL. Trate de pensar cómo lo haría. Esto es posible sólo con la ayuda de programas externos y / o batnets. fxsaber incluso tiene "automatizadores" adecuados, pero eso significa control externo sobre la ejecución de los procesos y el montaje de sus resultados. Eso es freno al cuadrado, además de totalmente inconveniente de usar. Tratar con estos controladores externos requiere mucha más habilidad.
En cuanto a la afirmación sobre código pequeño para implementar un sustituto del optimizador estándar, no estoy de acuerdo. Que yo sepa, los trabajos alternativos tampoco son pequeños, y requieren la adaptación de código experto. Si hay una demostración concreta sobre un algoritmo de optimización autónomo con código pequeño y muy sencillo de enchufar en EA, compártela con el público ;-).
En cuanto a la indiferencia del algoritmo de optimización, como si debiera ser capaz de manejar cualquier tarea sin afinar - no estoy de acuerdo. Sería una especie de magia, una "bala de plata".
No veo ninguna diferencia fundamental entre el algoritmo de optimización y el algoritmo NS. Ambos tienen metaparámetros.
Y sí - "no se hizo ningún trabajo para investigar la capacidad de búsqueda del algoritmo ", porque no se puede abarcar mucho terreno - ya había mucho trabajo por hacer. El propósito de la publicación es ponerlo a disposición del público para aquellos que quieran investigar y compartir sus hallazgos.
Hay auto-optimización en línea (se publicó en el blog), pero es sólo en un hilo, y el punto del artículo era paralelizar el algoritmo. Usar el probador como un iterador de trabajos y distribuirlos a los agentes para el recuento virtual en grupo... ese es el mayor truco de todo el proyecto. Sinergia.
- 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
Artículo publicado Optimización paralela con el método de enjambre de partículas (Particle Swarm Optimization):
El presente artículo describimos un modo de optimización rápida usando el método de enjambre de partículas, y presentamos una implementación en MQL lista para utilizar tanto en el modo de flujo único dentro de un EA, como en el modo paralelo de flujo múltiples como un complemento ejecutado en los agentes locales del simulador.
Desde un punto de vista algorítmico, el método de PSO es relativamente sencillo. La idea principal consiste en generar un conjunto de "partículas" virtuales en el espacio de los parámetros de entrada del asesor experto. Después, las partículas se mueven y modifican su velocidad dependiendo de las métricas comerciales del asesor experto en los puntos correspondientes en el espacio. El proceso se repite en multitud de ocasiones, hasta que las métricas dejen de mejorar. A continuación, mostramos el pseudocódigo del algoritmo:
Particle Swarm Optimization Pseudo-Code
Según este, cada partícula tiene la posición, velocidad y memoria actuales de su "mejor" punto en el pasado. Entendemos por "mejor" el punto (el conjunto de parámetros de entrada del experto) donde se ha conseguido el mejor valor de la función objetivo para esta partícula. Vamos a describir esto en una clase.
El tamaño total de las matrices es igual a la dimensión del espacio de optimización, es decir, al número de parámetros optimizables del asesor (pasados al constructor). Como la optimización presupone, por defecto, que cuanto mayor sea el valor de la función objetivo, mejor será el valor de la función objetivo, vamos a inicializar el campo bestValue con el número mínimo posible -DBL_MAX. Como criterio de valoración del experto, suele intervenir una de las métricas comerciales (el beneficio, la rentabilidad, el ratio de Sharpe, etcétera). Si realizamos la optimización utilizando un parámetro cuyos valores inferiores se consideran más convenientes (por ejemplo la reducción), podremos realizar las transformaciones adecuadas para maximizar los valores opuestos.
Las matrices y variables se han hecho públicas para simplificar el acceso y su código de recálculo. Respetando estrictamente los principios de la POO, deberíamos ocultar estas utilizando el modificador private y describir los métodos de lectura y modificación.
Autor: Stanislav Korotky