Introducción
Todo el mundo ha oído hablar de la inteligencia artificial y sus grandes progresos. Pero la realidad es que la creación de las primeras redes neuronales datan de 1958. Sin embargo, es ahora gracias a las grandes capacidades de computación, donde se está poniendo de moda.
Al igual que mediante las redes neuronales se intenta crear «inteligencia artificial», existe otra rama donde a base de la genética se intenta evolucionar en busca de una solución a un problema irresoluble.
La evolución genética tal y como nos lo enseñó Darwin, consiste en hacer prevalecer a los más fuertes y adaptados de una especie a costa de eliminar de nuestra especie a los más inadaptados y débiles. Para ello, deben reproducirse los mejores especímenes, dando a la sucesión de un material genético combinado y que a base de mutaciones, se mejore. Y así durante miles de años las especies han ido evolucionando hasta lo que somos hoy día.
¿Os habéis parado a pensar la cantidad de situaciones que se han tenido que dar durante miles de años para que ahora estés leyendo este artículo?
Se podría decir que infinitas.
Infinitas situaciones para llevar a una solución, que eres tú leyendo esto. Y esta «solución» que somos nosotros mismos es la mejor posible? Es decir, en este recorrido de millones de años atrás podríamos afirmar que entre todas las infinitas soluciones posibles, somos la mejor?
No, es imposible saber si es la mejor ya que hay infinitas soluciones, sin embargo es indudable que es una buena solución, ya que estamos aquí, tu leyendo y yo escribiendo. Y durante estos últimos millones de años, nuestra evolución genética nos ha permitido adaptarnos a nuestro entorno hasta el punto de estar aquí.
Algoritmos Genéticos
Muy bien, ya hemos dejado claro que la evolución genética ha permitido que nos adaptemos al entorno que nos rodea y sea una buena forma de dar solución a un problema irresoluble. Pero, ¿Cómo puedo utilizar esto?
Bueno, imaginemos que queremos enseñar a un robot a caminar. A ese robot le damos libertad para que mueva sus articulaciones como quiera.
La primera generación de robots nada más soltarlos al aire, se espachurrarán contra el suelo al no saber como deben colocar sus rodillas, piernas, etc.
Durante varias generaciones, aleatoriamente irán moviendo sus articulaciones en busca de sobrevivir. Nosotros, desde el punto de vista de un «dios», daremos puntuación a cada robot y cuantos mas metros sean capaces de caminar, mayor será su puntuación. Los robots que consigan aprender a mover sus articulaciones de tal forma que consigan andar, pasarán su material genético a las nuevas generaciones y así mediante miles y miles de generaciones, los robots aprenderán que para sobrevivir, deben llegar lejos caminando.
Todo esto lo podéis practicar de manera muy graciosa y divertida (pincha en la imagen y disfruta siendo un dios).
El trading y sus multiversos
Todos conocen a Javier Alfayate y su trabajo de Inercia Alcista, pero si no es tu caso, consiste en hacer un cálculo que el llama IA (inercia alcista) sobre una lista de ETFs sectoriales americanos y sobre esa lista, mensualmente seleccionar los mejores e invertir en ellos. Básicamente lo que hace es rotar su cartera de dinero entre los sectores más fuertes.
Pero claro, existen miles de ETFs… y combinaciones para el cálculo de la IA también. ¿Cómo sabes que la lista de ETFs sobre la que rota su cartera es la mejor? y ¿Cómo sabes que los valores que usa en el cálculo de la IA son los mejores para esa lista de ETFs? Existen millones de combinaciones posibles. Un multiverso de la locura de posibles soluciones tanto buenas como malas. Esto mismo lo dice él en su charla donde explica la inercia alcista (minuto 24:54 por si no quieres ver todo el video)
Lo que aquí se plantea es un problema irresoluble, con infinitas soluciones. No sabremos cual es la perfecta, pero si usamos ingeniería genética podremos encontrar una de muchas soluciones que sea similar a la mejor, sin llegar a ser la perfecta.
Y ¿Cómo hacemos eso?
Algoritmos genéticos aplicados al Trading
El problema está claro: infinitas formas de invertir dinero para ganar dinero sin perderlo por el camino. Y el camino es tenebroso, lleno de crisis, guerras, inflaciones y demás.
Para usar un algoritmo genético, lo que debemos hacer es crear una generación de traders que de manera aleatoria decidan su lista de ETFs y la forma con la que calculan su sistema de puntuación. En este caso, la Inercia Alcista. Los traders usarán su estrategia desde el año 2003 hasta 2023. 20 años invirtiendo siguiendo su estrategia.
¿Resultado?
Desastre absoluto. Al igual que los robots que comienzan a andar, la primera generación se desparrama contra el suelo. Estos traders inútiles pierden todo su dinero con estrategias sin sentido. Sin embargo, entre todos esos traders sin neuronas, hay un par de ellos que sus estrategias, lejos de ser ganadoras, pierden menos que el resto. Por tanto, para una nueva generación esos traders serán los que procreen para tener nuevos bebés traders. Combinamos su material genético y aplicando distintas mutaciones aleatorias en sus estrategias veremos si puedan hacerlo mejor que sus padres.
2º Generación. ¿Resultado?
Desastre. Pero ya no absoluto. La mayoría de los hijos han perdido dinero pero hay algo especial. Prácticamente todos han mejorado los resultados de sus padres. De nuevo seleccionamos a los mejores hijos para que sean los padres de la futura generación…
Y así, durante varias generaciones, esos traders en taparrabos acaban generando estrategias solventes a lo largo de varias generaciones, demostrando que pueden ser rentables durante los 20 años de trayectoria.
¿Cómo lo hemos hecho?
Bueno, lo primero decir que el algoritmo genético ha sido programado en R, sin hacer uso de ChatGPT, ya que cuando lo hice, ChatGPT no existía. Muchas horas me hubiese ahorrado si hoy me dispusiese a hacerlo de cero.
Se han usado más de 200 ETFs americanos. La gran mayoría con un histórico de datos de al menos 2006, pero muchos de ellos contamos con datos desde 1999. Los ETFs son desde sectoriales, hasta bonos, materias primas, deuda, refrito de acciones, gubernamentales, …. en fin, de todo. Hice listados que van desde 6 hasta 12 ETFs sobre los que rotar la cartera. Teniendo en cuenta que partimos de 200 ETFs, esto son unas 6,519,167,661,537,699,805 combinaciones posibles.
Para el cálculo de la puntuación se ha usado el indicador de la inercia alcista, donde también he combinado valores para sus indicadores. Eso son 144 combinaciones para cada 6,519,167,661,537,699,805 combinaciones posibles
Incluso he hecho combinaciones sobre cuantos ETFs distribuir la cartera, desde 2 hasta 4. Eso solo son 3 combinaciones posibles.
Por tanto, el multiverso de posibilidades que se generan son 6,519,167,661,537,699,805 x 144 x 3 = 2,816,280,429,784,286,315,760.
Cerca de 3 trillones de posibilidades.
¿te imaginas calcular esto por fuerza bruta para buscar la mejor solución?
Ejecutando el algoritmo genético
En vista de que por fuerza bruta es imposible, generé un algoritmo genético. Partimos de la creación de un poblado y en menos de 2 minutos ya tenemos a nuestros primeros 1000 traders operando a de manera random es busca de la IF y su retiro soñado.
De esa población nos quedamos con sus padres y a partir de ahí comienza la fiesta. A buscar hijos a partir de las estrategias locas de sus padres combinadas y con ligeras mutaciones que hagan mejorar a sus padres.
Estos procesos ya cuestan más por la cantidad de cálculos que se hacen. La puntuación máxima de la primera generación fue de 54.13 puntos.
¿Lograrán los hijos superar a sus padres?
Pues vaya que si mejoran! El mejor hijo ha conseguido una puntuación de 74.92 en la primera iteración! Eso si, ya el cálculo ha costado alrededor de 7 minutos. Se encontraron un total de 255 futuros padres.
Esto es normal. Mejorar a las primeras generaciones siempre es sencillo, sin embargo a medida que van optimizándose generación a generación, se vuelve muy complicado encontrar hijos que superen a los padres.
¿Seremos capaces de superar la puntuación de 74.92 en la tercera generación?
Boom! Puntuación de 95,45 el mejor hijo. Si te fijas, la rentabilidad anual cada vez es mayor y el máximo drawdown menor. En esta tercera generación, con solo una iteración hemos encontrado ya 10 padres para hacer una nueva generación. En concreto 25. Pero ya no son los 255 de la generación anterior.
Y así, seguimos generación a generación, haciendo varias iteraciones y al cabo de unas cuantas horas, el sistema nos devuelve el trader «perfecto».
Y digo «perfecto» porque nunca estás libre de sobreajuste. Y es por ello, que durante la fase de creación usaba datos desde 2000 hasta 2021, dejando 2022 fuera de la muestra para ver como se hubiese comportado en un entorno no entrenado.
Estuve ejecutando la «factoría de traders» durante varios meses. Generando estrategias, analizando sus resultados, buscando patrones o mejoras… hasta que a mediados de 2022 colgué las botas y seleccioné los que más me gustaban para dejar en cuentas demo.
Desde mediados de 2022 hasta hoy (fin de 2023) los estuve evaluando y ahora… los hacemos públicos.
¿Quieres conocerlos?
Eso espero, porque este proyecto me ha llevado bastante trabajo y me gustaría que le echaras un vistazo.
En este artículo te enseño las estrategias y sus resultados en real.
Excelente.. es bastante información nuevamente para mi..soy principiante y me encantaría aprender con esta tecnología.