El uso de algoritmos genéticos es un campo en el que el trading lleva trabajando desde hace décadas, teniendo todavía por delante mucho que recorrer. Veremos sus fundamentos y el porqué de su funcionamiento en el trading.
Latecnología de algoritmos genéticos se ha utilizado, con gran éxito, para la solución de problemas complejos en la industria como por ejemplo: optimización de carga de contenedores marítimos, estructuras moleculares, infraestructuras de redes de comunicaciones móviles, construcción de horarios en grandes universidades evitando conflictos de clases, etc. En resumen, los algoritmos genéticos son muy buenos en la búsqueda de soluciones en problemas complejos donde el número de combinaciones posibles es tan grande que es imposible explorar todas ellas.
Pues precisamente el diseño de un sistema de Trading es un problema complejo donde el número de combinaciones posibles de reglas e información de indicadores es tan grande que no es posible evaluar todas las combinaciones. Los algoritmos genéticos se adaptan perfectamente al diseño de sistemas de Trading para encontrar las reglas que dan mejores resultados en los mercados financieros.
En este artículo veremos los fundamentos de los algoritmos genéticos, como funcionan, y un ejemplo de cómo se aplican para encontrar las mejores reglas de Trading.
Los Algoritmos Genéticos son métodos adaptativos que pueden usarse para resolver problemas de búsqueda y optimización. Están basados en el proceso genético de los organismos vivos.
En general, el pseudocodigo consiste de los siguientes pasos:
1. Inicialización
Se genera aleatoriamente la población inicial, que está constituida por un conjunto de cromosomas los cuales representan las posibles soluciones del problema. En caso de no hacerlo aleatoriamente, es importante garantizar que dentro de la población inicial, se tenga la diversidad estructural de estas soluciones para tener una representación de la mayor parte de la población posible o al menos evitar la convergencia prematura.
2. Evaluación
A cada uno de los cromosomas de esta población se aplicara la función de aptitud para saber qué tan “buena” es la solución que se está codificando.
3. Condición de término
El AG se debera detener cuando se alcance la solucion optima, pero esta generalmente se desconoce, por lo que se deben utilizar otros criterios de detencion. Normalmente se usan dos criterios: correr el AG un numero maximo de iteraciones (generaciones) o detenerlo cuando no haya cambios en la poblacion. Mientras no se cumpla la condicion de termino se hace lo siguiente:
– Seleccion Despues de saber la aptitud de cada cromosoma se procede a elegir los cromosomas que seran cruzados en la siguiente generacion. Los cromosomas con mejor aptitud tienen mayor probabilidad de ser seleccionados.
– Recombinacion o Cruzamiento La recombinacion es el principal operador genetico, representa la reproducción sexual, opera sobre dos cromosomas a la vez para generar dos descendientes donde se combinan las características de ambos cromosomas padres.
– Mutacion modifica al azar parte del cromosoma de los individuos, y permite alcanzar zonas del espacio de busqueda que no estaban cubiertas por los individuos de la poblacion actual.
– Reemplazo una vez aplicados los operadores geneticos, se seleccionan los mejores individuos para conformar la poblacion de la generacion siguiente.
De esta forma se consiguen los mejores individuos que llevan en sus cromosomas las mejores combinaciones para el entorno en el que se desarrollan.
Ahora vamos a ver un ejemplo de como se aplican estos algoritmos para disenar las reglas de un sistema de Trading. Consideremos que estamos disenando un sistema que opera (solo en largo para simplificar el ejemplo) en un mercado de futuros en un grafico de barras. Estas barras pueden ser, por ejemplo, de cinco minutos, veinte minutos o incluso un dia. Una regla de Trading la modelamos como una funcion que nos devuelve en cada barra dos posibles valores “entrar en mercado” o “salir del mercado”. En cada barra se evalua esta funcion. Si en la barra actual nos dice, por ejemplo, “entrar en mercado” y ya estábamos comprados, entones no se hace nada porque se mantiene el estado. Si en la barra anterior estabamos fuera del mercado, entonces se realiza la compra porque hay cambio de estado.
Las reglas de trading las representamos mediante estructuras de arbol. Por ejemplo, en la figura 2 podemos observar la regla de trading que “entra en mercado” cuando el precio de la barra actual es mayor que la media de las ultimas 50 barras. La funcion “average” computa la media de n barras en el historico. El parametro de la funcion se especifica mediante el 50 que cuelga como nodo hijo en el arbol. La funcion “price” nos devuelve el precio de cierre de la barra actual. Por ultimo, podemos observar que el operador relacional “<” especifica la condicion de que la media de 50 barras sea menor que el precio de la barra actual, o que el precio de la barra actual sea mayor que la media de 50 barras, segun el sentido de lectura. En la figura 3 podemos observar otra regla de trading que “entra en mercado” cuando el precio de la barra actual es mayor que el precio maximo de las ultimas 30 barras. La funcion “maximum” nos da el precio maximo de las ultimas “n” barras, en este caso de las ultimas 30 barras.
Ahora vamos a combinar estas dos reglas de trading para obtener una más compleja que “entra en mercado” cuando se cumplen las dos condiciones a la vez. Esto se consigue mediante un árbol que une las dos reglas de trading mediante el operador relacional “and”. El resultado podemos verlo en la figura 4.
Ahora consideremos que tenemos dos reglas padre que vamos a utilizar para obtener una nueva generación. En la figura 5 vemos la regla padre que usamos en la figura 4 y otra nueva regla padre que “entra en mercado” cuando el máximo de 30 barras es mayor que la media de 28 barras y además el precio de la barra actual es mayor que el mínimo de las ultimas 6 barras. Ahora el algoritmo genético selecciona de forma aleatoria un subárbol de cada regla padre. Esta selección la podemos ver en la figura 5 mediante un circulo en cada regla padre. A continuación, el algoritmo sustituye el subárbol seleccionado en la regla padre 1 por el subárbol seleccionado en la regla padre 2 para así obtener una nueva generación. Cada nueva generación es evaluada para medir como de buena es y solo las mejores generaciones obtienen descendientes. En este proceso también se incluyen mutaciones al obtener las nuevas generaciones como, por ejemplo, ligeras variaciones de los parámetros de las funciones “máximum” o “mínimum” y así obtener diversidad de individuos.
Realizando este proceso con miles de generaciones, nos permite encontrar las reglas de trading que consiguen mejores resultado en los mercados. Este mismo proceso nos permite además que el sistema de trading se adapte de forma automática y natural a los cambios en su entorno y va evolucionando para sobrevivir en los mercados.
El instituto de investigación de las “nuevas tecnologías aplicadas al trading” de la Universidad de Málaga lleva varios años de estudio y ha conseguido resultados muy relevantes. Los resultados completos de esta investigación serán publicados, una vez esté concluida, en una revista científica especializada en la investigación de algoritmos genéticos de reconocido prestigio internacional. Así mismo un resumen de estos resultados será también publicado en Hispatrading Magazine.