Optimizar un robot comercial: un algoritmo genético



En un artículo anterior, comencé a comparar métodos de optimización paramétrica, es decir, seleccionar parámetros, evaluar la rentabilidad de operar un robot durante la posterior prueba posterior. Resultó que el método banal de Monte Carlo, la generación de combinaciones aleatorias no correlacionadas de parámetros de robot, funciona bastante bien. Ahora quiero probar un algoritmo popular, incluido uno en la comunidad de comerciantes de programación: el algoritmo de optimización genética .

Algoritmo genético para optimizar una estrategia comercial.


Consideraremos este algoritmo como un ejemplo de optimización de 2 parámetros. Los parámetros optimizados de nuestro robot son el período de la media móvil y TakeProfit . Para una mayor inmersión en la "genética", aceptemos llamar al período de la media móvil el gen responsable del "crecimiento", y TakeProfit, el gen para el "color de ojos".

En el espacio de valores de parámetros admisibles, cada punto, cada par de coordenadas - "altura / color de ojos" describe teóricamente un "individuo". Supongamos que creamos al azar 10 individuos. Este fue el primer paso del algoritmo de optimización genética: crear la primera generación:



En el espacio de coordenadas M - T, los puntos se seleccionan aleatoriamente. Por ejemplo, dos puntos marcados con un marco rojo son "individuos" con nombres de género neutro (¡este es un punto importante!) Zhenya y Sasha. El "crecimiento" de Sasha (en la formulación inicial del problema es el período promedio móvil) es de 11 unidades, el "color de ojos" es 0.6 (ojos verde-azul). Zhenya es ligeramente diferente en los parámetros. Las mismas características describen los 8 individuos restantes.

El segundo paso es la reproducción.


De toda la primera generación, determinamos un cierto número de las personas más "exitosas". El criterio, obviamente, es el valor de la FQ. Estos individuos se reproducirán, formando parejas al azar (por esta razón, recibieron nombres de género neutral). En general, se pueden establecer una serie de reglas para pares coincidentes. Por ejemplo, para seleccionar individuos que tienen características cercanas (es decir, literalmente, más cercanas en el espacio de coordenadas) a los individuos: endogamia. Por el contrario, puede buscar los opuestos (endogamia). No pude encontrar argumentos a favor de una de estas opciones: en mi implementación, las parejas se forman estrictamente por accidente ... Por ejemplo, Zhenya y Sasha aprobaron la calificación y decidieron dar a luz a un descendiente. ¿Qué significa esto en nuestro contexto?



De dos individuos “parentales” obtenemos el tercer individuo, que hereda parte de las características de uno de los padres, parte del otro. Por ejemplo, Zhenya y Sasha dieron a luz a una Nikita individual (¿Nikita, Nikita?):

  • Nikita heredó el signo "color de ojos" (parámetro TakeProfit del robot) de uno de sus padres: "Zhenya",
  • "Crecimiento" (el período del robot de media móvil) que Nikita heredó de "Sasha" ... pero ligeramente ajustado en la dirección de otro padre, Zhenya.

El hecho es que cuanto menor sea la dimensión del espacio de optimización (en nuestro caso es igual a 2), "más cerca" estará la descendencia. El algoritmo de optimización genética no determina estrictamente las reglas para la "herencia" de genes para un individuo hijo. Por lo tanto, al azar, Nikita tomó prestado el color de sus ojos sin ningún cambio, pero resultó estar en el medio entre ambos padres, más cerca de uno de ellos. En mi implementación, con el mismo éxito, Nikita podría tomar prestados los parámetros originales de ambos padres.

El tercer paso es la cría.


Motor del proceso evolutivo, selección natural. 4 de los 10 mejores individuos dieron 10 descendientes más. Ahora tenemos 20 individuos. El algoritmo de optimización genética implica mantener un tamaño de población constante. 10 personas deben "morir". En esta implementación, la mayoría de los individuos de la primera generación "mueren", del 80% al 100%.
En consecuencia, en nuestro ejemplo, la nueva generación estará compuesta por 0 ... 2 padres y 8-10 de sus descendientes. En otras palabras, si omite la letra, los nuevos vectores de los parámetros del robot comercial se calcularán a partir de los vectores obtenidos en el paso anterior, "propagación" (combinación) de las 4 mejores mejores pruebas. La mayoría de las “personas mayores” no aceptarán participar en la nueva iteración de selección (son posibles otras opciones para implementar la selección).

Algoritmo completado


La reproducción y la selección se repiten N veces. Específicamente, en nuestro ejemplo, para comparar con tres algoritmos probados previamente, se prueban 4 generaciones de 10 individuos, un total de 40 pruebas.
Pero puede suceder que otra población colapsará. En otras palabras, todas las pruebas se realizarán cerca de varios puntos. Para evitar esta situación, se utilizan varios mecanismos, en particular:

  • infusión de "sangre fresca" en la población. A los descendientes de la población actual se agregan varios individuos nuevos obtenidos por casualidad, de la misma manera que se formó la población inicial,
  • mecanismo de mutación: un individuo descendiente puede tener algunas de las características (coordenadas) ligeramente diferentes de las características de sus padres:



en este ejemplo

  • las características de la descendiente Jane y Joss: "crecimiento" y "color de ojos" se toman prestados de cada uno de los padres,
  • Las características de la descendencia de Sam y Siri son algo diferentes de las características correspondientes de ambos individuos parentales.

En mi implementación, a pesar de las mutaciones y los "individuos nuevos", la población tuvo que actualizarse periódicamente en su conjunto para evitar la convergencia prematura, la localización de toda la población en un espacio limitado.

Si volvemos a los datos originales en los que probamos los algoritmos de Monte Carlo, el descenso de gradiente y el algoritmo con el nombre de trabajo "batalla naval", el proceso de optimización se puede ilustrar con la siguiente animación:



Como puede ver en la animación, al principio la disposición de los puntos es caótica, pero, con las generaciones posteriores, tiende a áreas con valores más altos del DF.

Ahora compare los algoritmos en la misma superficie: P = f ( M , T ):



Montecarlodescenso gradiente"Batalla naval"algoritmo genético
95,7%92,1%97,0%96,8%

El valor promedio del extremo encontrado de la FQ como porcentaje del valor global.

Por supuesto, es demasiado pronto para juzgar por un conjunto de datos de entrada, pero hasta ahora el GA, en relación con nuestro robot comercial, es inferior al algoritmo de "batalla naval":

  • bastante insignificante - por el promedio del valor cuasi óptimo encontrado de la FQ,
  • proporciona la peor estimación de la estabilidad paramétrica del algoritmo de negociación, ya que no "investiga" el entorno de las tuplas de parámetros cuasi óptimos que se encuentran en muy poco.

Prueba final de 4 algoritmos de optimización


La prueba final se realizó en 4 conjuntos de datos de entrada: los resultados del backtest de la estrategia comercial en 4 segmentos diferentes del historial de precios ( EURUSD : 2016, EURUSD: 2017, XAUUSD : 2016, XAUUSD: 2017).



(ejemplos de filtros digitales como funciones de dos parámetros para 4 series temporales de precios)

Esta vez, la optimización se realizó de acuerdo con 3 parámetros:

  1. período de media móvil "rápida"
  2. período de media móvil "lenta"
  3. TakeProfit (ganancia en la transacción, en porcentaje, al llegar a la cual se completó la transacción).

Cada uno de los parámetros tomó 20 valores diferentes. Total para construir la mesa
P = F (Mf, Ms, T)
donde P es la ganancia, Mf es el período del promedio móvil "rápido", Ms es el período del promedio móvil "lento", T es TakeProfit,
20 * 20 * 20 = se realizaron 8,000 iteraciones de prueba.

La optimización se llevó a cabo con una restricción de 160, 400 y 800 pruebas (cálculos de DF en coordenadas seleccionadas). Cada vez, los resultados se promediaron para 1,000 iteraciones de optimización. El valor promedio de DF para el vector de parámetros cuasi óptimo encontrado fue:
Montecarlodescenso gradiente"Batalla naval"algoritmo genético
84,1%83,9%77,0%92,6%

Por separado, vale la pena señalar que GA muestra un buen resultado incluso con un pequeño porcentaje de pruebas del número total posible de opciones:
pruebasMontecarlodescenso gradiente"Batalla naval"algoritmo genético
160 de 8,00079,1%76,7%73,1%87,7%
400 de 8,00084,7%85,0%77,4%93,7%
800 de 8,00088,6%90,1%80,4%96,3%

En lugar de una conclusión


Me sorprendió un poco el resultado, que mostró un algoritmo de optimización genética. No creo que específicamente el "paradigma genético" del método le haya proporcionado el primer lugar en la lista. En cierto sentido, de acuerdo con la lógica de la elección de coordenadas, se parecía a los métodos de dicotomía / proporción áurea. Probablemente valga la pena probar uno de estos algoritmos y comparar el GA con él.

Volviendo al robot comercial, vale la pena señalar cómo el "alivio" de la superficie formada por el CF (beneficio) cambia de año en año. Es decir, habiendo "optimizado" el robot en la historia de 2017, no tiene sentido aplicar esta configuración en 2018 (primer trimestre, mes, semana ... 2018).

Las estrategias comerciales artificiales, dogmáticas e indefensas como la nuestra (comprar en la intersección de la media móvil) probablemente no pasarán de moda pronto. Lamentablemente, no tenía otras estrategias. En consecuencia, atribuyo las ganancias o pérdidas de los robots comerciales a la suerte en lugar de las ventajas / desventajas del algoritmo. Por lo tanto, la tarea de optimización paramétrica de un robot comercial es para mí personalmente exclusivamente de interés académico.

Source: https://habr.com/ru/post/es430138/


All Articles