¿Nos visitas desde USA? Entra a tu página Rankia.us.
Juan M. Almodóvar

Machine Learning aplicado al trading

Cómo optimizar un sistema mediante minería de datos

estadistica alfatrader
 
Para todo sistema de trading hay que elegir el conjunto de parámetros con el que ponerlo a operar. Seleccionar los parámetros adecuados de un sistema es complicado pues la elección puede dar lugar a sistemas con rendimientos totalmente diferentes y por supuesto estropear un sistema ganador.
 

 

Aunque los sistemas han de reoptimizarse periódicamente para ajustarlos a la dinámica cambiante del mercado, el verdadero valor de la optimización de un sistema reside - en mi opinión - en la evaluación de su robustez. Utilizo la optimización de parámetros como una técnica para evaluar si el sistema seguirá siendo rentable en el futuro y no solo en el backtest.
 
Por lo tanto utilizo las técnicas de optimización de sistemas para saber si nuestro sistema es robusto y operará bien o por el contrario perderá dinero. Una buena optimización para un sistema con unos cinco o seis parámetros conlleva tal cantidad de pruebas históricas (backtest) que podría llevarnos una eternidad (literalmente). Para resolver esto se hace uso del algoritmo genético y finalmente lo más complicado será elegir de entre los resultados que nos ofrezca este algoritmo un conjunto de parámetros correcto.
 
Hasta ahora esto era una tarea muy compleja y que fácilmente nos llevaba a la sobreoptimización. Tras muchas pruebas he podido comprobar cómo los mejores resultados se obtienen al aplicar una técnica de minería de datos llamada k-mean clustering.
 
¡Todo este proceso es necesario para saber si nuestro sistema es o no robusto! Se entiende que muchos traders arrojen la toalla con los sistemas al sobreoptimizar consiguiendo únicamente sistemas que funcionan en backtest y se estrellan en forwardtest. Trataré en este artículo de explicar cómo utilizar esta nueva técnica de la forma más sencilla posible - tal y como hago en mis cursos de trading automático - porque el proceso, una vez entendido, renta muchísimo en nuestras cuentas de trading.
 

Problema 1. ¡Demasiados backtest!

 
Por cada parámetro que elegimos optimizar en un sistema aumenta el número de backtest a realizar y por tanto alarga el tiempo que tarda la optimización en completarse. Si por ejemplo tenemos solo dos parámetros y queremos probar las combinaciones de 100 valores para cada uno, solo tendremos que hacer 100x100 = 10,000 backtests. Si añadimos un tercer parámetro con sus respectivos 100 valores para probar habrá que multiplicar esos 10,000 backtests por 100, con lo que tenemos 1,000,000 de pruebas... Todavía no es demasiado pero a este ritmo pronto empieza a ser algo inmanejable y cuando decidimos optimizar 5 o 6 parámetros nuestro ordenador casero, por más moderno y potente que sea, nos dirá que necesita una eternidad para calcular tantísimos backtests.
 
La solución pasa por utilizar el algoritmo genético. Este algoritmo realiza unos backtests iniciales de manera aleatoria y selecciona los que mejor resultado han tenido. A continuación varía ligeramente los parámetros de estos backtests positivos (mediante cruce y mutación, de ahí su nombre) y vuelve a probarlos, así sucesivamente evoluciona su exploración de parámetros hasta encontrar los resultados óptimos.
 
El algoritmo no tiene misterio, sin embargo sí hay algunos trucos técnicos a la hora de utilizarlo con metatrader ya que el algoritmo tiene por diseño una tendencia a encontrar óptimos locales... Es decir, cuando encuentra el primer conjunto de valores buenos se detiene obviando otros conjuntos de valores mucho mejores. Aunque como digo, correctamente utilizado esto no es un problema.
 
En el siguiente gráfico se muestra el resultado de una optimización, donde cada punto azul es el resultado de un backtest, el eje vertical representa la estadística que estamos mejorando. Como se ve con cada nuevo backtest el algoritmo genético arroja mejores resultados:
 
optimizacion
 
Ahora hay que elegir entre los resultados del algoritmo genético. Esta es la parte difícil y en la que en hemos trabajado mucho para que se pudiera realizar fácilmente con Alphadvisor, nuestra herramienta de diseño de sistemas de trading.
 

Problema 2. ¿Cómo elegir el conjunto de parámetros?

 
Si fuesemos directos a elegir el conjunto de parámetros que más beneficio hubiese dado tendríamos seguramente un problema. Con toda probabilidad ese conjunto será fruto de una sobreoptimización y operar con ellos en forwardtest nos llevará a la ruina.
 
Es mucho mejor buscar un conjunto de parámetros positivo que tenga otros conjuntos cercanos de similares características, es decir buscar "vecinos parecidos" para asegurarnos que estamos en un "buen barrio".

Cuando optimizamos dos parámetros es relativamente fácil hacerlo de manera visual (aunque también tiene su dificultad), por ejemplo en el siguiente gráfico se ve claramente una buena zona paramétrica para seleccionar:
 
alfatrader optimización
 
¿Pero qué sucede cuando tenemos más de dos parámetros? No podemos imaginarnos un espacio de cuatro, cinco o diez dimensiones. La solución tradicional a esto fue optimizar de dos en dos. Es decir, primero optimizamos dos parámetros y los seleccionamos visualmente, con buenos vecinos, a continuación optimizamos otros dos parámetros y los volvemos a seleccionar, etc. Esto es poco eficiente, tedioso y relativamente incorrecto, pero era lo mejor que se podía hacer... hasta ahora.
 

El algoritmo k-means clustering

 
Podemos utilizar el algoritmo de minería de datos k-means clustering para seleccionar los conjuntos de parámetros óptimos de nuestro sistema aunque tengamos más de 2 parámetros optimizados (y por tanto más de tres dimensiones en el espacio de búsqueda de parámetros).
 
Para explicar cómo funciona utilizaré un ejemplo gráfico sacado de la página de scikit-learn, una libería de Machine Learning para Python. En el ejemplo, tenemos una imagen y se utilizan 3 bytes para guardar el color del pixel en sistema RGB. Utilizando el algoritmo k-means buscamos clusters o agrupaciones de colores muy similares en estas 3 dimensiones de color. En concreto la imagen original estaba compuesta por 96,615 colores únicos pero hemos buscado 64 agrupaciones de colores muy similares. La primera imagen es la original de 96,615 colores y la segunda tiene una paleta de solo 64 colores encontrados con el algoritmo. Como veis el resultado no está nada mal, para apreciar diferencias hay que fijarse en masas amplias de color como el cielo.
imagen original
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
k-means
 
Haremos algo similar con nuestras optimizaciones para encontrar conjuntos de parámetros optimos con "buenos vecinos", esto es, que sean robustos.
 
Y los resultados son bastante buenos, en la imagen se ve un análisis estadístico hecho con Alphadvisor de 10 clusters obtenidos al optimizar uno de los sistemas. En la parte inferior el análisis detallado de cada cluster. Los resultados son un forward test de marzo, abril y mayo de 2013.
 
estadistica alfatrader
 
Hemos empezado a desarrollar el algoritmo k-means dentro de Alphadvisor, en su módulo optimizador, en breve estará disponible para todos y estoy seguro que mejorará la operativa de los usuarios de la herramienta pues este algoritmo permite optimizar de una forma más segura cualquier sistema de trading automático.
 
Actualización: Ya está disponible dentro de Alphadvisor el módulo clasificador por k-means.
Actualización 2: Puedes continuar leyendo la segunda parte de este artículo.
 

Más información sobre trading automático inteligente

Para más información sobre métodos de Inteligencia Artificial aplicado al trading consulta la web de mi Curso Online de Trading Automático Inteligente.


 
 
 
  1. #1

    Riovero

    Hola Juan:
    Revisa el artículo porque creo que hay huecos y faltan gráficos a los que te refieres.
    Un cordial saludo.

  2. #2

    Victorin

    Juan, un tema super interesante.

    Estoy desarrollando un optimizador para sistemas de trading, y el primer paso que hemos implementado es la técnica de fuerza bruta (brute-force), que no es nada más que probar todas las combinaciones de parámetros posibles para buscar el conjunto óptimo. El problema es la memoria requerida por el sistema y el tiempo de cálculo.

    El siguiente paso es la optimización genética, que como bien has dicho en el artículo es probar una muestra pequeña de combinaciones e ir aplicando pequeñas modificaciones a las ganadoras para emular una técnica de selección natural hasta que llegamos al óptimo. Basado en mi experiencia esta técnica suele reducir cerca del 70-80% las combinaciones necesarias (backtest) para llegar al óptimo, aunque como bien apuntas tiene sus drawbacks.

    Y sobre el clustering k-means, entiendo su mayor virtud: comparar matrices de NxN parámetros, descubriendo las "comunidades" o "hotspots" donde los resultados son más óptimos (lo que podríamos considerar zonas robustas en nuestro modelo).

    Mi pregunta és, previamente al proceso de clustering necesitas tener el resultado de todas las combinaciones (brute-force) para posteriormente "agrupar" los conjuntos de parámetros robustos?
    Tal y como he entendido en el artículo, la técnica KNN sirve para "decidir" la combinación óptima una vez has calculado los P&Ls de las combinaciones (no aporta ninguna ventaja en ese proceso de velocidad/reducción de casos).

    Saludos y felicidades por la calidad de los artículos!

  3. #3

    Juan M. Almodóvar

    en respuesta a Victorin
    Ver mensaje de Victorin

    Hola Victorin:

    Al optimizar utilizando fuerza bruta lo que estás haciendo es explorar completamente todo el espacio de resultados posibles. Pero precisamente esto es lo que tiene un coste computacional altísimo y por eso utilizamos el algoritmo genético, que encuentra óptimos locales dentro de ese espacio de resultados con un coste computacional asequible.

    Por otra parte, como dices k-means no aporta ventaja en la reducción del tiempo de optimización. Es una forma de seleccionar los parámetros robustos que se han obtenido ya sea por fuerza bruta, por algoritmo genético u otras técnicas de optimización.

    ¡Muchas gracias por tu comentario! Saludos.

  4. #4

    Victorin

    en respuesta a Juan M. Almodóvar
    Ver mensaje de Juan M. Almodóvar

    Muchas gracias por la aclaración Juan, el tema de machine learning aplicado al trading es super interesante.

    Como dicen los anglosajones, keep up the good work! :)

  5. #5

    Sirkiu

    Articulo muy formativo, gracias por la aportación.

Autor del blog

  • Juan M. Almodóvar

    Director de investigación y desarrollo de Sistemas Inversores, (consultora especializada en trading algorítmico), desde donde ha colaborado con los departamentos de sistemas de varios fondos de inversión y diseñado software para trading como Alphadvisor. También imparte un Curso Online de Trading Inteligente en la Intelligent Trading School. Centra su carrera profesional en el ámbito de la Inteligencia Computacional aplicada a los mercados financieros.

Envía tu consulta

Próximos Webinars

Apúntate ya a los próximos webinars de Rankia:

guias rankia

Conoce la otra comunidad del grupo Emergia.

Verema: Vinos, Restaurantes, Enoturismo y Club de Vinos

Este sitio web usa cookies para analizar la navegación del usuario. Política de cookies.

Cerrar