Algoritmos Genéticos, introducción

Dentro de las herramientas que vamos a utilizar para optimizar modelos de gestión automatizada están los algoritmos genéticos. El funcionamiento es bastante simple, no por ello su puesta en práctica, son programas de complejidad media que no se pueden hacer con una hoja excel o una macro.

Supongamos que queremos buscar unos parámetros que nos ayude a generar una cartera de acciones a partir de cuatro variables como el siguiente ejemplo:

 

Resultado = (Nº Acciones, Volatilidad máxima acción, Drawdown, Rentabilidad año)

Por ejemplo: 

 

Queremos optimizar los siguientes parámetros de nuestro modelo, que crea una cartera a partir del número de acciones, la volatilidad máxima de la acción, el drawdown y la rentabilidad mínima. Como se trata de una función no lineal solo se puede optimizar dando valores aleatorios a cada valor o bien mediante algoritmos genéticos que es una solución elegante a la vez de rápida.

Para ello a cada variable le asignamos un número binario de 9 cifras que equivale a 512 posibilidades, después mediante programación podemos transformar cada uno con una función pudiendo tener valores negativos.

1 Paso

Generamos 1,000 números binarios aleatorios de de 38 dígitos en formato binario (0,1)

Calculamos el Resultado para cada uno

2 Paso

Nos quedamos con el 20% mejor de todos los Resultados, y generamos un nuevo número binario a partir de dos números, para ello aleatoriamente los cruzamos

Generamos 100 números más aleatorios y vemos los resultados.

Generamos mutaciones, es decir cambiamos algún 0 por un 1 o al revés en un porcentaje bajo.

 

3 Paso

Generamos un bucle muchas veces con esos números hasta que la solución no converja.

En el siguiente ejemplo se muestran los pasos, en el futuro pondré un programa funcionando, programado en C#

 

 

Recursos:

http://eddyalfaro.galeon.com/geneticos.html

https://github.com/grantmwilliams/standardGeneticAlgorithm/tree/master/Binary%20Genetic%20Algorithm

Redes Neuronales

Esta entrada al blog pretende ser una pequeña introducción al apasionante mundo de la inteligencia artificial aplicada a la gestión de activos. Resumiendo una red neuronal es un sistema que permite buscar patrones a partir de muchos datos, además puede hacer predicciones a partir de datos.  Como comprenderéis una Red Neuronal por si no va a dar dinero, es más una pieza más de un sistema robusto que permita encontrar pautas en activos que permita aprovecharse de una ineficiencia del mercado.

Ejemplo sencillo de una red neuronal:

Como vemos en el gráfico anterior es bastante simple comprender el funcionamiento, a partir de unos datos en este caso Entradas se procesan en la Capa oculta para obtener una Salida, en este caso nos daría 1 o 0, (comprar o vender).

Personalmente he programado redes neuronales utilizando Matlab, Python y R. En sucesivos ejemplo voy a realizar unos ejemplos que se utilizan para obtener unos parámetros necesarios para la creación de un sistema de inversión. En mi modesta opinión las redes neuronales es una herramienta adicional que bien utilizada puede dar muy buenos resultados, pero lo más complejo es encontrar el sistema de inversión o trading que nos dé una esperanza positiva de acierto.

Las redes neuronales al igual que los algoritmos genéticos, y las cadenas de Márkov se utilizan pueden dar muy buenos resultados siempre que encontremos aquellos patrones que nos pueden dar un buen resultado. Como siempre tenemos que estudiar las variables que muestran significatividad para entrenar el sistema.