Sistemas de Trading con algoritmos genéticos para operar en bolsa

08.03.2015 02:56

El uso de sitemas de trading con algoritmos genéticos, para operar en bolsa, 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.

La tecnologí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 y para operar en bolsa.

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. A lo largo de las generaciones, las poblaciones evolucionan en la naturaleza de acorde con los principios de la selección natural y la supervivencia de los más fuertes, postulados por Darwin (1859). Por imitación, de este proceso, los Algoritmos Genéticos son capaces de ir creando soluciones para problemas del mundo real. La evolución de dichas soluciones hacia valores óptimos del problema depende en buena medida de una adecuada codificación de las mismas.

En la naturaleza, los individuos de una población compiten entre sí en la búsqueda de recursos tales como comida, agua y refugio. Incluso los miembros de una misma especie compiten, a menudo, en la búsqueda de un compañero. Aquellos individuos que tienen más éxito en sobrevivir y en atraer compañeros tienen mayor probabilidad de generar un gran número de descendientes. Por el contrario, individuos poco dotados producirán un menor número de descendientes. Esto significa que los genes de los individuos mejor adaptados se propagarán en sucesivas generaciones hacia un número de individuos creciente. La combinación de buenas características provenientes de diferentes ancestros, puede a veces producir descendientes "superindividuos", cuya adaptación es mucho mayor que la de cualquiera de sus ancestros. De esta manera, las especies evolucionan logrando unas características cada vez mejor adaptadas al entorno en el que viven.

 

Los Algoritmos Genéticos.

Usan una analogía directa con el comportamiento natural. Trabajan con una población de individuos, cada uno de los cuales representa una solución factible a un problema dado. A cada individuo se le asigna un valor o puntuación, relacionado con la bondad de dicha solución. En la naturaleza esto equivaldría al grado de efectividad de un organismo para competir por unos determinados recursos. Cuanto mayor sea la adaptación de un individuo al problema, mayor será la probabilidad de que el mismo sea seleccionado para reproducirse, cruzando su material genético con otro individuo seleccionado de igual forma. Este cruce producirá nuevos individuos descendientes de los anteriores los cuales comparten algunas de las características de sus padres. Cuanto menor sea la adaptación de un individuo, menor será la probabilidad de que dicho individuo sea seleccionado para la reproducción y, por tanto, de que su material genético se propague en sucesivas generaciones.

El poder de los Algoritmos Genéticos proviene del hecho de que se trata de una técnica robusta, y pueden tratar con éxito una gran variedad de problemas provenientes de diferentes áreas, incluyendo aquellos en los que otros métodos encuentran dificultades. Si bien no se garantiza que el Algoritmo Genético encuentre la solución optima del problema, existe evidencia empírica de que se encuentran soluciones de un nivel aceptable, en un tiempo competitivo con el resto de algoritmos de optimización combinatoria.

Ahora vamos a ver cómo funcionan los algoritmos genéticos. Por un lado, tenemos el conjunto de soluciones de un problema, llamado fenotipo y el conjunto de individuos de una población natural, codificando la información de cada solución en una cadena, generalmente binaria, llamada cromosoma. Los símbolos que forman la cadena se denominan genes. Cuando la representación de los cromosomas se hace con cadenas de dígitos binarios se le conoce como genotipo. Los cromosomas evolucionan a través de iteraciones, llamadas generaciones. En cada generación, los cromosomas son evaluados usando alguna medida de aptitud. Las siguientes generaciones (nuevos cromosomas), se obtienen a partir de  operadores genéticos, de sobrecruzamiento y de mutación.

Un algoritmo genético puede presentar diversas variaciones, dependiendo de cómo se aplican los operadores genéticos (cruzamiento, mutación), de cómo se realiza la selección y de cómo se decide el reemplazo de los individuos para formar la nueva población.

Figura 1. Algoritmo genético i: inicialización, f(X): evaluación, ?: condición de término, Se: selección, Cr: cruzamiento, Mu: mutación, Re: reemplazo, X*: mejor solución.

En general, el pseudocódigo consiste de los siguientes pasos:

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.
Evaluación: A cada uno de los cromosomas de esta población se aplicará la función de aptitud para saber qué tan "buena" es la solución que se está codificando.
Condición de término El AG se deberá detener cuando se alcance la solución óptima, pero ésta generalmente se desconoce, por lo que se deben utilizar otros criterios de detención. Normalmente se usan dos criterios: correr el AG un número máximo de iteraciones (generaciones) o detenerlo cuando no haya cambios en la población. Mientras no se cumpla la condición de término se hace lo siguiente:
Selección Después de saber la aptitud de cada cromosoma se procede a elegir los cromosomas que serán cruzados en la siguiente generación. Los cromosomas con mejor aptitud tienen mayor probabilidad de ser seleccionados.
Recombinación o Cruzamiento La recombinación es el principal operador genético, 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.
Mutación modifica al azar parte del cromosoma de los individuos, y permite alcanzar zonas del espacio de búsqueda que no estaban cubiertas por los individuos de la población actual.
Reemplazo una vez aplicados los operadores genéticos, se seleccionan los mejores individuos para conformar la población de la generación 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 cómo se aplican estos algoritmos para diseñar las reglas de un sistema de Trading. Consideremos que estamos diseñando un sistema que opera (sólo en largo para simplificar el ejemplo) en un mercado de futuros en un gráfico de barras. Estas barras pueden ser, por ejemplo, de cinco minutos, veinte minutos o incluso un día. Una regla de Trading la modelamos como una función que nos devuelve en cada barra dos posibles valores "entrar en mercado" o "salir del mercado". En cada barra se evalúa esta función. 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 estábamos fuera del mercado, entonces se realiza la compra porque hay cambio de estado.

Las reglas de trading las representamos mediante estructuras de árbol. 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 últimas 50 barras. La función "average" computa la media de n barras en el histórico. El parámetro de la función se especifica mediante el 50 que cuelga como nodo hijo en el árbol. La función "price" nos devuelve el precio de cierre de la barra actual. Por último, podemos observar que el operador relacional "<" especifica la condición 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, según 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 máximo de las últimas 30 barras. La función "maximum" nos da el precio máximo de las últimas "n" barras, en este caso de las últimas 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 últimas 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 círculo 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 cómo de buena es y sólo 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.

 

Figura 2. Representación de regla de trading como estructura de Árbol. Si el precio (price) de la última barra es mayor que la media (average) de las últimas 50 entonces "entra en mercado".

 

 

Figura 3. Si el precio (price) de la última barra es mayor que el máximo (maximum) de 30 barras entonces "entra en mercado".

 

 

Figura 4. Combinación de dos reglas de trading para formar otra más compleja con el operador booleano "and". Esta regla "entra en mercado" cada regla padre.  A A contincite un covalo media de 28 barras  otra nueva regla padre que "a barra actual sera  si se cumplen las dos reglas de trading que la componen a la vez, correspondientes a las reglas de las figuras 3 y 4.

 

Figura 5. Formación de una nueva generación a partir de dos individuos (padres) de la población.

Tomado de la página web: https://www.xtb.es/-/sistemas-de-trading-con-algoritmos-geneticos-para-operar-en-bolsa