Juan M. Almodóvar

Trading automático y cuantitativo

Detectando el Régimen de Mercado con redes neuronales

2
Publicado por Juan M. Almodóvar el 03 de febrero de 2014

El mercado es dinámico, cambia. Sabemos que tiene momentos tendenciales, momentos en los que aumenta exageradamente la volatilidad, momentos en los que está plano... Y al tener estructura fractal vemos estos cambios de comportamiento en temporalidades intradiarias o a largos plazos de semanas, meses y años.

Al estado en el que se encuentra el mercado en un momento dado se le llama técnicamente régimen de mercado y es otro de los monstruitos frente al que muchos diseñadores de sistemas hemos de enfrentarnos (otro y más temido es el monstruo de la sobreoptimización). En este artículo explicaré brevemente, según mi experiencia, por qué es peligrosa esta característica del Mercado, lo difícil que es afrontarla y cómo estoy desarrollando un método basado en redes neuronales que, aunque experimental y un tanto rudimentario, me está dando muy buenos resultados.   Leer más

Etiquetas: algoritmos · sistemas de trading · redes neuronales · mercados

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

2
Publicado por Juan M. Almodóvar el 15 de enero de 2014

En un artículo anterior explicaba cómo realizar una buena optimización para conseguir parámetros robustos en nuestros sistemas combinando dos técnicas de Inteligencia Artificial: el algoritmo genético y el clasificador k-means.

En esta segunda parte del artículo os traigo cuatro meses de resultados forward de una operativa utilizando este método de optimización. Los resultados son sorprendentes.

Detalles de la prueba

En primer lugar los detalles de cómo realicé la prueba. En dos cuentas de trading diferentes conecté 6 robots con distintas estrategias sobre el EURUSD. En la cuenta que llamé "control" seleccioné los parámetros a utilizar para cada robot de manera manual. Es decir, hice una optimización y elegí los parámetros que mejores estadísticas daban (esperanza matemática, porcentaje de drawdown, beneficio, etc). En la cuenta que llamé "kmeans" clasifiqué las optimizaciones de los robots utilizando el algoritmo clasificador k-means.

Recordad que la idea de utilizar el clasificador era encontrar conjuntos de parámetros que tuviesen otros conjuntos de parámetros parecidos, de tal forma que este conjunto de parámetros no representase un pico extremo de resultados estupendos debido a una segura sobreoptimización sino una montaña suave, más propia de un sistema robusto.

Con estas dos cuentas empecé la prueba a finales de agosto del año pasado y la finalicé a finales de diciembre, realmente 4 meses completos de trading en forward. 

Resultados de 4 meses en forward test

Los resultados siguientes son en Pips, no en dinero. Lo importante al desarrollar y testear es obtener todas las estadísticas en esta medida, queremos medir la ventaja estadística del sistema, cómo de predictivo es y en función de estas estadísticas podremos luego obtener fácilmente los parámetros para ajustar la gestión monetaria y entonces sí, hacer que el sistema gane dinero.

Ahí van los gráficos de equity de los dos sistemas ¿adivináis cuál es el de k-means?

 

El sistema "control" finalizó la prueba con 248 pips, un Drawdown máximo de 757 pips y un System Quality Number de 0,36.

El sistema "kmeans" hizo 1476 pips, un Drawdown máximo de 409 pips y un System Quality Number de 2,06.

Un análisis de resultados por ratios riesgo/beneficio

En los siguientes gráficos vemos la distribución riesgo/beneficio de los trades. Este gráfico es como una radiografía del sistema, que te dice la cantidad de trades buenos y malos. Para entendernos, cuanto más se acumule en la parte derecha mejor pues significa que tenemos muchos trades positivos que ganaron por ejemplo 2, 3, 4 veces lo que podían haber perdido. Claramente los dos sistemas tienen una radiografía muy diferente, la distribución de riesgo/beneficio por trade es muchísimo mejor en el sistema "kmeans" (click en la imagen para ampliar).

¡La mejora es sorprendente! No me podría cansar de explicar que el mayor enemigo del trader automático es la sobreoptimización y la combinación del algoritmo genético y el clasificador k-means es un potente y efectivo aliado contra ella.

Aplicando gestión monetaria al sistema robusto kmeans

Y ahora lo bueno... teniendo un sistema relativamente robusto, con un buen SQN y que va dando pips de manera estable ¿cuánta pasta podemos sacarle aplicando algoritmos de gestión monetaria?

Con las estadísticas generadas por la optimización previa a la puesta en marcha del sistema obtuve los parámetros para mi algoritmo de gestión monetaria. Aplicado sobre el sistema y empezando a operar con 1 lote sobre una cuenta de 10,000€, los 1476 pips conseguidos en estos 4 meses finales del 2013 se convirtieron en 24,262€ de beneficio. Ahí va el gráfico:

Nada mal para mis 6 robots en un solo cuatrimestre. Ahora empiezan el año con una nueva reoptimización, espero que continúen dando cada mes al menos la misma cantidad de pips.

El optimizador de k-means está disponible para utilizar dentro de Alphadvisor v5, si quieres aprender a utilizarlo solo tienes que registrarte en uno de los webinarios gratuitos que damos todas las semanas. Si te interesa aprender a diseñar tus propios sistemas y cómo sacarle el máximo partido a mis técnicas de optimización de sistemas puedes asistir al curso online de trading automático.

 

Leer más
Etiquetas: k-means · minería de datos · optimización · algoritmos · sistemas de trading

Tradeslide, una nueva herramienta para el análisis de sistemas

0
Publicado por Juan M. Almodóvar el 02 de diciembre de 2013

El análisis y monitorización de los resultados de un sistema de trading es clave en el trading algorítmico. Tradeslide es un nuevo servicio online que nos permite medir el pulso de nuestra operativa con un nivel de detalle sorprendente y realmente útil.

Hace ya casi un año que mis amigos de Tradeslide me invitaron a probar la beta privada de su aplicación, desde entonces he estado testeando sus algoritmos de análisis con mis propios sistemas de trading, así que sé el motor que hay detrás de la herramienta y os puedo asegurar que funciona de lujo y está hecho con mucho cariño, pasión por hacer las cosas bien y sobre todo mucha cabeza y buena tecnología.

¿Cómo funciona Tradeslide?

Inicialmente tras registrarte solo tienes que conectar una de tus cuentas de trading para que empiece a subir los datos y analizar la información. En unas pocas horas el análisis está hecho y puedes ver los resultados de tus sistemas.

El análisis se basa en un conjunto de categorías o medidas como son la "experiencia", la "aversión al riesgo", la "estrategia de salida", etc. La idea es puntuar tus estrategias en cada una de esas medidas que son como tus habilidades de trader y el reto es mejorar en todas estas habilidades a la vez hasta alcanzar el nirvana del trader... Es motivante y desde luego ¡aporta un feedback valiosísimo!

Os muestro el análisis de una de mis estrategias con sus puntuaciones, el sistema de trading inteligente HIVE:

Análisis de estabilidad de riesgo y timing de salidas

Una de mis categorías preferidas es la que mide la estabilidad en el riesgo. No importa si tu estrategia es muy arriesgada o poco, lo que importa es que mantenga un riesgo consistente. Como inversor puedo elegir una estrategia muy arriesgada de manera consciente pero lo que no quiero es que el riesgo de la estrategia elegida esté dando saltos y durante una temporada me esté jugando todo el pellejo y en otra estemos perdiendo el tiempo y me dé menos rentabilidad que las letras del tesoro.

Otro análisis muy útil es el tiempo de salida, te dice qué pasaría si tus operaciones se cerrasen un 10%, 20%, 30%, antes o después. Se grafican todos los niveles a la vez y puedes ver también cada nivel de manera numérica. En el caso de mi sistema de trading HIVE la salida es óptima pero en otros sistemas esta medida me ha servido para saber que me estaba dejando bastentes duros en la mesa... 

Competir para mejorar

Tradeslide se centra en una competición entre traders donde se valora al "más invertible". Para ello contamos con un ranking de estrategias donde nuestro sistema de trading automático HIVE está por ahora en la séptima posición. La competición es dura, puesto que la gente de Tradeslide invitó a los mejores traders discrecionales y automáticos del mundo, pero ahí estamos dando guerra ;-)

En conclusión: una gran herramienta de análisis para el trader de sistemas

Dejando claro que no tengo ninguna relación comercial con ellos y que lo que más me une a su CEO Juan Colón es su profesionalidad y su ilusión por hacer las cosas bien, tengo que recomendaros encarecidamente que probéis Tradeslide.

Hay muchas más vertientes de la herramienta de las que no he hablado como su creciente comunidad de traders para compartir conocimiento y un fantástico analizador de riesgo y apalancamiento que todavía estoy analizando... ¡Incluso recientemente han incorporado un análisis que incluye trading con monos! Pero esto mejor ya lo descubrís vosotros, que tiene su gracia :-).

Ya sabéis, nuestro trabajo con los sistemas de trading es medir, medir y medir y en ésto Tradeslide nos puede ayudar mucho.

Leer más
Etiquetas: sistemas de trading · trading · estadistica robots forex

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

5
Publicado por Juan M. Almodóvar el 19 de junio de 2013
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.
Etiquetas: k-means · minería de datos · optimización · algoritmos · sistema de trading · sistemas de trading

Torturando los datos hasta que confiesen. Parte 2, Sobreoptimización

0
Publicado por Juan M. Almodóvar el 26 de mayo de 2013

 

La sobreoptimización es el enemigo más temido del trader de sistemas, es una trampa complicada que toda plataforma de trading que permita diseñar sistemas automáticos nos tiende fácilmente y en la que muchos hemos caído al principio. Diseñamos un sistema de trading con cinco indicadores, seleccionamos quince parámetros (periodo de las media móvil corta y larga, pips para el stop loss, pips para el take profit, niveles sobrecompra y sobreventa del RSI, etc) y ponemos nuestro superordenador de ocho núcleos a optimizar el sistema...  Al cabo de tres o cuatro horas ya tenemos decenas de combinaciones impresionantes, nuestro sistema en los últimos 3 años dibuja una línea recta ascendente como la trayectoria de un misil ¡ha llegado el momento de operar en real!
 
Todos los que hemos caído en esta trampa sabemos que tan pronto como pongamos el sistema en tiempo real (ya sea paper trading o con dinero de verdad) la trayectoria de misil de nuestro sistema continuará, pero en dirección a tierra. Perderemos puntos de manera trepidante hasta dejar la cuenta a cero, garantizado.
 
Ni el sistema ha dejado de funcionar, ni el mercado ha cambiado de dinámica, tampoco es mala suerte, ni el broker nos está espiando y va a por nuestros stops... La explicación más sencilla es que hemos sobreoptimizado nuestro sistema.
 

El problema de la sobreoptimización o adaptación al ruido

 
En el trading automático partimos de la idea de que las cotizaciones del mercado son una combinación de señal y ruido. Por una parte las señales o patrones que alertan de lo que puede suceder en el mercado, idealmente un movimiento al alza o a la baja, estas señales se repiten en el tiempo y con nuestros sistemas intentamos detectarlas y explotarlas. Cuando optimizamos un sistema de trading estamos intentando ajustar nuestro sistema para que detecte correctamente estas señales que se han dado en el pasado, con la esperanza de que se sigan repitiendo en el futuro próximo en cantidad suficiente como para sacarles un beneficio.
 
Los optimizadores de toda plataforma de trading automatizable ajustan los parámetros de nuestro sistema a la serie de cotizaciones pasada. El problema es que la serie no solo contiene señales predictivas sino también ruido, mucho ruido. Ruido como el de las televisiones antiguas cuando no tienen sintonizado un canal. Este ruido es aleatorio, es decir, no se vuelve a repetir de la misma manera en el futuro y es aquí donde radica el problema de la sobreoptimización.
 

 

Cuando ponemos nuestro ordenador a optimizar un sistema en el pasado corremos el riesgo de que lo haga "demasiado bien" y se ajuste perfectamente al ruido de la serie, como sabemos ese ruido no se volverá a repetir en el futuro y por lo tanto operar en función de él nos hará perder dinero porque lo que no se repite no es predictivo. De alguna forma debemos optimizar el sistema para que se ajuste a las señales predictivas pero sin sobreoptimizarlo ajustándolo al ruido no predictivo.
 

Un ejemplo gráfico de sobreoptimización

 
Veamos con un ejemplo gráfico a qué nos referimos con señales, ruido y sobreoptimización. Imaginemos que tenemos datos de cotizaciones de mercado que representan los cierres de las últimas sesiones. Para obtenerlos hemos utilizado una combinación de una regla más un comportamiento aleatorio, es decir, una señal y un poco de ruido. En este caso la señal o patrón es simplemente una tendencia claramente alcista en el tiempo y el ruido una desviación aleatoria que se suma a cada valor de la serie. La línea azul representa el patrón alcista a detectar, los cierres son la suma del patrón más el ruido.
 
 
Nuestro objetivo es diseñar un sistema de trading para detectar la señal subyacente (la tendencia alcista). En principio no conocemos la forma de la señal, y como datos solo disponemos de estas cotizaciones que sabemos que son una mezcla de la señal subyacente y ruido. Intentaremos dibujar una línea que al ajustarse lo mejor posible a todos estos puntos describa la señal subyacente. Al principio nuestro sistema estará compuesto por un único indicador, después le añadiremos un segundo, un tercero y así sucesivamente, aumentaremos su complejidad hasta llegar hasta un total de diez indicadores.
 
La curva roja representa el resultado de un sistema con 10 indicadores optimizados. Cada nuevo indicador añadido a nuestro sistema le está permitiendo dibujar curvas más y más complejas, puede girar y retorcer hasta ajustarse perfectamente a todos los puntos. Hemos sido capaces de detectar todos los cierres de las últimas sesiones. ¡Compramos en los mínimos y vendemos en los máximos! ¡milimétricamente, al Pip!
 
Pero pensemos de nuevo que a lo que queríamos ajustarnos no era a los puntos dados, que son una combinación de señal y ruido, sino solo a la señal... Tal vez un sistema con dos o tres buenos indicadores no fuera capaz de obtener cada punto de cotización pero podría describir la tendencia general alcista. Un sistema más simple podría ser capaz de capturar la esencia de la serie temporal (una tendencia alcista) mientras que el sistema más complejo, con más indicadores, es capaz de describir mejor la combinación de señal y fluctuaciones aleatorias que no se volverán a repetir. Y esto, claramente no nos interesa porque al poner nuestro dinero en estos trades estaremos asumiendo riesgo gratuitamente.
 
Cuando nuestro supersistema de diez indicadores se enfrente al futuro lo hará pensando que el ruido volverá a repetirse, pero no tiene ni idea del patrón subyacente de tendencia alcista, su comportamiento será errático y rápidamente vaciará nuestra cuenta.
 
En general las explicaciones sencillas tienen una mayor probabilidad de ser correctas puesto que son menos sensibles a ajustarse a los datos meramente por suerte. Este principio es conocido como La Navaja de Ocam y junto a los principios de espionaje de datos y sesgo de muestreo debe tenerse en cuenta a la hora de diseñar nuestros sistemas de trading. Si queréis profundizar en todo esto y mucho más y aprender a hacer trading de sistemas rentable podéis matricularos en nuestros cursos de trading automático.
 
Etiquetas: sobreoptimización · optimizacion de expert advisors · sistemas · optimizacion de EAs · optimizacion de sistemas de trading · optimizacion rapida robots de forex · sistemas de trading

Torturando los datos hasta que confiesen. Sesgo de muestreo y espionaje de datos

8
Publicado por Juan M. Almodóvar el 15 de mayo de 2013

Uno de los elementos fundamentales para crear un sistema de trading es el conjunto de datos históricos. Los datos son una especie de materia prima con la que  se hacen los sistemas, requieren atención en su obtención y manejo, puesto que de no tener cuidado el mal uso puede hacernos perder mucho dinero. Es fácil "torturar los datos hasta que confiesen" y obtener resultados impresionantes sobre el papel que nos digan lo que queremos escuchar: que vamos a ganar mucho dinero operando el sistema; y sin embargo cuando pasemos a operar el sistema en real llegará el desastre en forma de drawdown incontrolado. En este primer artículo de la serie "Torturando los datos hasta que confiesen" hablaré de dos principios generales del manejo y obtención de datos históricos que son fundamentales para nuestra operativa automática.

Estos dos principios generales son el sesgo de muestreo (sampling bias) que trata de cómo se obtienen los datos y el espionaje de datos (data snooping) que trata de cómo se manejan los datos. Para entender estos principios veamos, con un ejemplo de cada uno, cómo si no los tenemos presentes pueden tendernos sus trampas y afectar muy negativamente a nuestro trading de sistemas haciéndonos creer en una ilusión ganadora que se convertirá en un horror en ejecución con dinero real... 
 

El sesgo de muestreo o sampling bias

 
En 1948 en las elecciones presidenciales de los EEUU entre Truman y Dewey sucedió un claro ejemplo de sesgo de muestreo. En la noche de las elecciones, una de los mayores periodicos realizó una encuesta a la población sobre el voto que habían dado. La encuesta indicaba que Dewey había ganado y el periodico confiado lo declaró así en el titular de su edición. Cuando se hizo el recuento total sucedió que Dewey había perdido, para deleite de un sonriente Truman.
 
Truman sonriente
 
No fue un caso de error a la hora de analizar los resultados de la estadística, el problema residía en otro lugar. En 1948 tener teléfono era un lujo que no estaba al alcance de toda la población y aquellos que disponían de él tendían a pertenecer a un grupo elitista que favorecía a Dewey mucho más que el votante medio. Como el periodico realizó su encuesta telefónicamente, inadvertidamente utilizó una distribución in-sample (los datos de muestreo) que era diferente a la distribución out-of-sample. Al recoger los datos de manera sesgada el resultado de la estadística estará similarmente sesgado.
 
El sesgo de muestreo es más propio de los traders discrecionales que de los automatizados. Es lo que habitualmente se conoce como "cherry picking" o seleccionar ejemplos de señales que funcionan en el histórico ignorando los ejemplos donde no funcionan. ¿Os suena? Es el truco de magia de salón al que nos tienen acostumbrados muchos de los gurúes del trading en sus libros y seminarios.
 
En el trading automático el sesgo de muestreo se produce típicamente al elegir periodos de mercado fuertemente alcistas o bajistas para optimizar nuestros sistemas, lo que no es representativo del mercado futuro que vendrá. A la hora de diseñar y optimizar un sistema hay que fijarse bien en que los datos históricos utilzados contengan representaciones adecuadas de todos los tipos de mercado para no caer en las redes del sesgo de muestreo.
 

Espionaje de datos

 
El segundo principio relativo a cómo manejamos los datos se llama espionaje de datos. Esta es una de las trampas más comunes a la hora de optimizar sistemas. Se basa en que de alguna manera estamos utilizando para diseñar y optimizar nuestro sistema los datos del futuro, unos datos de los que no dispondremos cuando nuestro sistema esté operando en tiempo real.
 
Un ejemplo básico sería utilizar en nuestro sistema el precio de cierre de la sesión para elegir la dirección del trade a tomar... Sería absurdo que nadie diseñara un sistema así si no es por pura estupidez... pero tomar datos prestados al futuro es un error común que podemos cometer si no pensamos bien lo que estamos haciendo, como vamos a ver en el siguiente ejemplo.
 
Imaginemos  que un fondo de inversión está desarrollando un sistema de trading para el mercado Forex. Utiliza 8 años de histórico de datos en el cruce del US Dollar (USD) con el British Pound (GBP), con estos datos buscarán un patrón que explotar. El fondo utiliza las series normalizadas de porcentaje de cambio de precios diarios junto con algunas medidas estadísticas como la media y varianza calculadas sobre los 8 años de histórico. Con estos datos empiezan a diseñar su sistema de trading ganador que predice la dirección del cambio. Cada día, basándose en las fluctuaciones de los últimos 20 días el sistema emite una orden de compra o venta. Para diseñar y validar su sistema utilizan el 75% de los datos históricos para optimizar los parámetros del sistema y el 25% restante para comprobar los resultados de aplicar el sistema.
 
La prueba es un éxito. El porcentaje de acierto es del 52.1%, lo que puede parecer poco pero representa una ventaja frente al mercado y por lo tanto una oportunidad para ganar dinero si esta ventaja se mantiene durante suficiente tiempo. De hecho, este 25% de histórico representa 2 años o 500 días de trading en los cuales se ha conseguido un respetable 22% de beneficio.
 
¡Pero cuando el sistema empieza a ser operado en real viene el desastre! El rendimiento se deteriora drásticamente y el sistema empieza a perder dinero como un descosido. En el fondo de inversión se preguntan qué puede estar pasando, se tiran de los pelos ante la incertidumbre (¿detenemos el sistema?) y ya esperan las llamadas enfurecidas de sus clientes.
 
Espiando al futuro
 
 
 
¿Qué ha sucedido? ¿Hay una explicación a este desastre? Sí, el espionaje al futuro. Aunque a la hora de desarrollar su sistema fueron lo suficientemente cuidadosos como para dejar apartado una parte del histórico (el 25%) donde comprobar el rendimiento de la estrategia resulta que los datos para la prueba afectaron a los datos utilizados para optimizar los parámetros del sistema. De manera inadvertida cuando los datos históricos originales fueron normalizados y se obtuvieron los estadísticos de media y varianza todo el histórico fue utilizado. Por lo tanto el 25% de datos reservado a la prueba afectó a los datos que utilizábamos para optimizar los parámetros y como podría esperarse ayudó a que el rendimiento final fuese superior a lo que debería.
 
Parece un pequeño error no muy grave, pero lo es. Los datos para el in-sample estaban contaminados y por lo tanto la estimación final del rendimiento en la prueba no era precisa... provocando que lo que era una mala estrategia sin prácticamente ventaja frente al mercado pasara por las pruebas como una estrategia interesante.
 
 

Y ahora, todavía lo podemos hacer peor

 
Ya sabemos que si no seleccionamos adecuadamente los datos podemos caer en la trampa del sesgo de muestreo y si no los manejamos adecuadamente podemos vernos afectados por el espionaje de datos. ¿Podría ser peor? Sí, para terminar de empeorarlo todo combinemos ahora el sesgo de muestreo y el espionaje de datos en una auténtica trampa mortal en la que han caído mucho traders novatos y que es la base de muchos bestseller de cómo hacerse rico en la Bolsa.
 
Recordemos que el sesgo de muestreo se define basándose en cómo se obtienen los datos antes de optimizar y el espionaje de datos se refiere a cómo los datos afectan a la optimización y diseño del sistema. Son conceptos diferentes pero hay ocasiones, como el siguiente ejemplo, en los que el sesgo de muestreo se da como consecuencia del espionaje de datos.
 
Imaginemos que estamos desarrollando un sistema para stocks del SP500 basado en sus datos históricos. El sistema más básico que podemos pensar es el típico "buy and hold", comprar la acción y mantenerla. ¿Qué rendimientos dio nuestra estrategia durante los últimos 20 años? Fácilmente a partir de casi cualquier combinación de stocks nuestros resultados parecen muy prometedores. ¡Pero no tan rápido! Inadvertidamente hemos sesgado los resultados a nuestro favor seleccionando únicamente compañías que actualmente siguen cotizando ¿Qué hay de aquellas que salieron del índice dejando de cotizar? No estaban entre nuestra posible selección y por lo tanto solo podíamos elegir entre las compañías supervivientes, las cuales evidentemente tendían a dar unos resultados positivos. 
 
Cuando pongamos nuestra estrategia a funcionar lo haremos sobre stocks que sobrevivirán o no puesto que no sabemos cuáles dejaran de cotizar en los próximos 20 años... En este momento el rendimiento histórico no representa adecuadamente el rendimiento futuro que podríamos esperar, ya que de nuevo los datos históricos donde optimizar el sistema (selección de stocks) no son representativos, es decir estamos cometiendo un error de sesgo de muestreo y el origen del error es que hemos espiado los datos en el futuro y seleccionado únicamente aquellas compañías supervivientes. ¿Veis como lo podíamos hacer todavía peor? :-)
 

Conclusión

 
Conocer estos dos principios generales del manejo y obtención de datos nos evitarán muchos disgustos a la hora de hacer trading con sistemas. Realmente es sencillo evitar caer en sus trampas simplemente poniendo un poco de atención a la hora de diseñar nuestras estrategias.
 
Si queréis profundizar en el tema, podéis encontrar mucha más información al respecto en el libro Learning from data, de Yaser S. Abu-Mostafa.
Etiquetas: Datos · sesgo · muestreo · optimizacion de EAs · sistemas · Sistemas automáticos de Trading · sistemas de trading

Sistemas de objetivos difusos

5
Publicado por Juan M. Almodóvar el 23 de octubre de 2012

Estoy probando una nueva técnica para diseñar sistemas: objetivos difusos. En las primeras operaciones me ha dado un excelente resultado y espero que siga así aunque es pronto para cantar victoria y se necesita muchas más operaciones para tener garantías mayores de que funciona el invento.

Una muy mala idea a la hora de diseñar sistemas automáticos de trading es utilizar objetivos de profit y stop fijos. En mi opinión, no sólo es ortopédico sino que además te expone bastante a sufrir los efectos de la sobreoptimización. Utilizar señales de salida (al igual que hacemos con las entradas) es otra mala idea a evitar... puesto que te expone de nuevo a la sobreoptimización (esta vez debido a la serialización de operaciones... que es harina de otro costal y casi mejor lo dejamos para otro post si os parece). Así que desde hace tiempo intento utilizar salidas basadas principalmente en la volatilidad utilizando indicadores de análisis técnico tipo ATR. 

Ahora bien, aunque colocar objetivos de profit y stop en función de la volatilidad suele darme buenos resultados, siempre hay operaciones que no llegan al objetivo de beneficio por los pelos o tocan el stop y vuelven. Da rabia porque si una operación de 100 pips no ha llegado al objetivo por 5 pips y se da la vuelta ¿¡no había predicho tu sistema de trading un 95% del movimiento?! ¡¿Por qué hemos de dejar de rentabilizar esta predicción?! 

La solución trivial es usar break evens (colocar el stop a precio de entrada en determinado momento para no arrancarte los pelos de la cabeza cuando una operación que casi gana se da la vuelta hacia tu stop) o usar trailings (ir moviendo el stop resguardando una parte de los beneficios conforme avanza la operación).

Así que salidas en función de la volatilidad, breakeven y trailings. Ok, ¿y si ahora en vez de colocar estos objetivos a una operación de 1 lote, la parto en diez operaciones y a cada una le doy unos objetivos ligeramente diferentes? El sistema no fija un objetivo para cada operación sino que se lo da a cada una dentro de un rango... por ejemplo coloca las 10 operaciones con objetivos entre 60 y 100 puntos de profit y stop. Si en general el sistema predice razonablemente bien la dirección inmediata del mercado ¿podría esto generar mejores curvas de equity?

No lo sé, al menos no hasta que ejecute las pruebas suficientes. De momento he diseñado un sistema con esta técnica y los primeros resultados han sido positivos:

Aquí hay 9 operaciones de venta a 0.1, cada una con objetivos ligeramente diferentes, cerraron en positivo todas. La línea roja es el beneficio cerrado y son 453 pips. La amarilla corresponde al flotante positivo por la última operación que tiene un objetivo de profit muy grande y va con trailing (cerrará en positivo porque el trailing ha superado de lejos el precio de entrada).

Los trades negativos son dos buys, son del mismo sistema y es debido a la forma en la que he construido el sistema, es una cuestión técnica pero conviene aclararla. No es 1 expert advisor que recibe una señal de entrada y ejecuta 12 operaciones partidas y con objetivos diversos. Son 12 sistemas con parámetros diferentes a los que su altísima correlación (¡son el mismo sistema!) les hace operar casi a la vez y casi en la misma dirección a todos. Se podría hacer de otra forma, pero lo he hecho así :-)

¿Y para qué todo este montaje se preguntarán algunos? Bueno, elegir los parámetros óptimos para un sistema de trading siempre es complicado... el mercado cambia y no te avisa, ya sabemos que hay que elegir un conjunto de parámetros robustos para los sistemas pero esta técnica me permite escoger un rango de parámetros robustos

Esta es mi técnica de "objetivos difusos", es como disparar con una escopeta de perdigones en vez de con un rifle de francotirador. Veremos si sigue dando estos resultados en en las próximas operaciones... 

Lo mejor es que es muy fácil de implementar técnicamente, básicamente:

  1. Tienes un sistema con esperanza matemática positiva.
  2. Optimizas mediante walk forward analysis para obtener unos 10 conjuntos de parámetros robustos.
  3. Ejecutas 10 veces el sistema con un conjunto diferente de entre los seleccionados.

¿Qué os parece la técnica? ¿os animáis a probarla en vuestros sistemas?

Actualización 13/12/12

He tenido funcionando 2 estrategias diferentes con esta técnica durante un aproximadamente un mes, una de ellas se ha hundido (por la estrategia), aquí van los resultados de la que ha funcionado bien.

 

 

Leer más
Etiquetas: sistemas de trading · optimización · takeprofit · stoploss · rango · ATR · volatilidad

Algoritmos de trading que dan forma al mundo

0
Publicado por Juan M. Almodóvar el 06 de octubre de 2012

Diseñamos algoritmos que ejecutan y gestionan las operaciones que se realizan en los mercados financieros. Estos algoritmos son cada vez más complejos y opacos llegando incluso a lo que se conoce como Black Box Trading. ¿Hasta qué punto estos algoritmos que mueven billones de dólares en cuestión de microsegundos son capaces de modificar el mundo?

Eso es lo que nos plantea Kevin Slavin, cofundador de la exitosa empresa de videojuegos Zynga en su charla How algorithms shape our world en TED.

 

En concreto habla del Flash Crash del 6 de mayo del 2010 cuando el Dow Jones perdió un 9% de manera casi instantanea sin que nadie lo advirtiera y a día de hoy todavía no está claro qué es lo que pasó ni quién o qué fue el responsable, tal y como se ve en la investigación abierta por Nanex. Pero también nos habla de sucesos tan interesantes como las guerras de algoritmos de fijación de precios en la reventa de libros por particulares en la tienda online Amazon, en una ocasión en la que dos algoritmos se enzarzaron en una épica pelea donde perdieron el control y llegaron a ofrecer un libro descatalogado de biología, "The making of a fly", por más de 23 millones de dólares.

 

Los traders de alta frecuencia han desarrollado algoritmos muy extraños. Unos parten operaciones enormes para no entrar al mercado como un elefante en una cacharrería y ser descubierto por los otros traders... otros al contrario buscan a estos algoritmos para explotarlos. Cazadores y presas.

Kevin nos muestra los algoritmos "the knife", "the carnival" y "the Boston shuffler" descubiertos por la empresa Nanex y que si me permitís la licencia poética son como el agente Smith de Matrix, se están ejecutando dentro del sistema financiero día y noche. Lo siguiente es una imagen del efecto del algoritmo "the knife" en los mercados.

 

La imagen que encabeza este artículo pertenece al artista Michael Najjar, es el prefil del índice Down Jones recortado sobre una cordillera de Argentina. Una metáfora de cómo los algoritmos modifican nuestro mundo que Kevin utiliza durante su charla para exponer los peligros que la falta de control sobre los algoritmos que utilizamos puede tener en nuestras vidas. Una interesante y necesaria exposición.

 

Leer más
Etiquetas: algoritmos · HFT · high frecuency trading · wall street · sistemas de trading

Sistemas que solo funcionan en backtest

2
Publicado por Juan M. Almodóvar el 23 de julio de 2012

¿Cuántas veces hemos visto un sistema que obtiene excelentes resultados en backtest y tras ponerlo a operar estrella la cuenta? ¿Sirven para algo los backtest y optimizaciones? ¿Son esos resultados ganadores una ilusión, producto del azar tal vez?

Muchos traders de sistemas se encuentran pronto con esta situación tan desconcertante y arrojan la toalla pensando que sus sistemas solo funcionan en backtest y siempre fallan en forwardtest. Seguramente están pasando por alto que cualquier resultado estadístico de un backtest ha de evaluarse teniendo en cuenta la influencia de la aleatoriedad y el sesgo de la sobreoptimización.

El problema del deterioro out-sample

En el siguiente gráfico vemos el deterioro de un sistema de trading que ha sido optimizado en un periodo de tiempo in-sample, hemos seleccionado los mejores resultados y probado de nuevo en un periodo out-sample distinto al de optimización.

Backtest

Como se ve en el esquema nuestro sistema de trading que prometía estupendos beneficios pero una vez probado en out-sample demuestra un comportamiento errático, propio de los sistemas que no tienen poder predictivo. Hay tres explicaciones muy comunes y en mi opinión erroneas, para explicar el deterioro de los resultados out-sample. 

La primera es que el deterioro se debe puramente al azar. Una vez ponemos el sistema en forward test el azar modifica los resultados obtenidos. Sin embargo, si esto fuera así tendríamos tantos resultados out-sample positivos como negativos... y sabemos por experiencia que el caso común es el segundo. Descartado por tanto el azar como principal culpable del deterioro.

La segunda explicación es que la dinámica del mercado cambia. Es cierto que los mercados son sistemas no estacionarios (es decir que sus propiedades estadísticas no se mantienen estables) pero de ahí a que cada vez que pasamos de nuestro backtest a forwardtest el mercado cambie va un mundo. Sería incluso grato para nuestro ego de trader pensar que el mercado está esperando a que conectemos nuestro flamante robot ganador de backtest para cambiar su dinámica y hacer saltar nuestros stops. Descartado por absurdo.

Una tercera explicación, también muy escuchada, es la de que muchos traders ya conocen la estrategia. Siempre que hablemos de trading de baja frecuencia y teniendo en cuenta la abrumadora cantidad de estrategias posibles, el volumen negociado en el total de mercados y la cantidad de agentes de mercado (cada uno con sus propios objetivos para participar en los mercados) me resulta extremadamente difícil pensar que el agotamiento out-sample se debe a la masificación en el uso del sistema.

Aleatoriedad y sobreoptimización

Una explicación más razonable se basa en la influencia de la aleatoriedad y el sesgo de la sobreoptimización. Ambos elementos combinados son, en mi opinión, los culpables del deterioro del backtest. Intentaré explicar cómo creo que funciona este proceso:

En primer lugar, podríamos entender la dinámica del mercado como la combinación de un comportamiento sistemático y de otro comportamiento aleatorio (ruido). Los buenos sistemas explotan el comportamiento sistemático, este comportamiento se seguirá observando en el out-sample y es la fuente de beneficios del sistema. Al contrario el comportamiento aleatorio no es recurrente y se mostrará diferente en cada muestra de datos. La mayor parte de la dinámica del mercado se debe al comportamiento aleatorio, así que podemos razonar que una parte de los resultados del sistema se deben a la suerte, una correspondencia accidental entre las señales del sistema y el ruido no recurrente del mercado. Estos beneficios debidos a la suerte no se volverán a repetir y es de esperar que el resultado futuro del sistema en out-sample sea inferior al del in-sample.

En segundo lugar, nuestro backtest ha sido elegido entre un gran número de optimizaciones para obtener la mejor combinación de parámetros. La optimización premia la combinación que mejores resultados da pero no es un proceso trivial realizar una optimización que clasifique los mejores resultados por el componente sistémico y no por el componente aleatorio, porque como ya hemos dicho éste es el mayor componente de la dinámica del mercado.

La sobreoptimización y la aleatoriedad combinadas son seguramente los responsables del deterioro de nuestros sistemas tras realizar el backtest. ¿Y cómo podríamos evitarlo? ¿cómo podríamos saber que nuestro backtest está correctamente realizado y que podemos confiar en él y operar el sistema? Existen procedimientos rigurosos de optimización de sistemas de trading y otros procedimientos diferentes para la validación de los resultados, espero poder hablar de ellos en próximos artículos en este blog, de momento os dejo con un video del método cross-validation para evitar la sobreoptimización. Y si queréis más información os recomiendo el capítulo Data-Mining Bias: The Fool's Gold of Objective TA del libro Evidence-Based Technical Analysis de David Aronson.

 

Leer más
Etiquetas: backtest · forwardtest · out-sample · in-sample · deterioro · evaluación · estadistica · aleatoriedad · sesgo · t-student · sistemas · sistemas de trading

Herramientas de Trading Automático

4
Publicado por Juan M. Almodóvar el 16 de julio de 2012

Para desarrollar una operativa con sistemas podemos utilizar diversos tipos de herramientas, podemos hacer una clasificación no exhaustiva de estas herramientas en función de su versatilidad, complejidad y curvas de aprendizaje. Diferenciaría entre plataformas de trading programables, lenguajes de programación y plataformas de estadística, machine learning o data mining.

Para el que comienza suele ser más apropiado utilizar una plataforma de trading programable, como Metatrader o Ninjatrader. Estas plataformas suelen integrar el data-feed y el trade-feed del broker y la programación de sistemas e indicadores sencillos no suele ser demasiado compleja. Proporcionan una curva de aprendizaje suave pero a cambio para tareas avanzadas (integraciones con bases de datos u otro software externo) suelen ser poco versátiles.

Utilizando lenguajes de programación como Java, C/C++/C# o R, tendremos toda la potencia y flexibilidad que nuestra habilidad como programadores nos permita. Un buen conocimiento de librerías y frameworks relacionados con el trading es imprescindible. Sin embargo, toda esta potencia viene a cambio de un extra de trabajo de programación y mantenimiento a la hora de integrar todos estos sistemas. Desarrollar nuestras propias herramientas de trading puede ser una tarea abrumadora para una sola persona tanto por profundidad como extensión, mejor si cuentas con un equipo de desarrollo.

Las plataformas de estadística, machine learning o data mining son una de mis soluciones preferidas. Algunas de las más conocidas son Matlab o RapidMiner. Contienen paquetes matemáticos muy avanzados que interactuan entre sí perfectamente. Los únicos puntos débiles de estas plataformas suelen ser la integración del data-feed y el trade-feed del broker, aunque suelen existir plugins que solventan este problema en mayor o menor medida.

Rapid Miner

¿Qué herramientas debemos elegir para desarrollar nuestra operativa con sistemas? ¿Nos volcamos a aprender la plataforma de trading integrado? ¿Un lenguaje de programación junto a sus frameworks y librerías? ¿Plataformas estadísticas? En mi trabajo diario utilizo las tres, la operativa con sistemas es una tarea compleja que consta de multitud de fases como el análisis de mercado, desarrollo de indicadores y sistemas, conexión con los feeds, optimización de sistemas, evaluación de backtests, etc. Y cada tipo de herramienta tiene sus pros y sus contras en cada fase del trabajo. 

 

Leer más
Etiquetas: RapidMiner · trading automatico · Sistemas automáticos de Trading · sistemas de trading · sistemas
Juan M. Almodóvar

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. Centra su carrera profesional en el ámbito de la Inteligencia Computacional aplicada a los mercados financieros.




RSS
e-Mail









Rankia utiliza cookies propias y de terceros, con ellas obtenemos información sobre tus pautas de navegación y así podemos ofrecerte una mejor experiencia de uso y servicio mostrándote información relacionada con tus preferencias e intereses. Si continúas navegando aceptas nuestra política de cookies.