sábado, 25 de mayo de 2013

¿Cómo saber si un sistema es rentable? (3)

Seguimos con la tercera entrada de nuestra metodología de desarrollo y análisis de sistemas de trading.

Una vez se tenga claramente definida la estrategia a seguir (como vimos en nuestra entrada anterior), se deberá proceder a implementar la estrategia mediante alguno de los lenguajes de programación existentes en las distintas plataformas de trading. Este tarea se compone de dos pasos:
1.- Desarrollo

Durante la fase de desarrollo sólo se espera que el código compile y que genere señales de entrada y salida en el mercado aproximadamente correctas (pueden contener errores e imprecisiones), y que no den ningún tipo de mensajes de error. El código fuente debe seguir los estándares de calidad que hayan sido marcados (indentación, comentarios, etc), e idealmente debería estar basado en plantillas de desarrollo ya existentes.
2.- Depuración

En este apartado se deberán comprobar las entradas y salidas individuales generadas por el sistema, así como los cálculos intermedios realizados. El objetivo es determinar si la implementación que se ha realizado de la estrategia es correcta. Para ello se deberá realizar una simulación histórica de la misma. El tamaño de la muestra para la simulación debe lo suficientemente grande para que se produzcan varias entradas en el mercado para cada una de las posibles combinaciones de reglas del sistema, filtros aplicables, gestión del riesgo y gestión monetaria. Durante la simulación se deberán utilizar valores “razonables” para los distintos parámetros de configuración, ya que en este paso lo importante es comprobar que las reglas funcionan correctamente, y no tanto evaluar la rentabilidad del sistema. A continuación se deberán analizar, barra a barra, las distintas entradas y salidas del mercado que se han producido, y comprobar que se ajustan a lo esperado.

Ejemplo: Cruce de dos Medias Móviles

Desarrollo

La estrategia ha sido programada mediante el lenguaje mql4 y la plataforma MetaTrader 4. El análisis de los datos ha sido realizado utilizando el lenguaje de programación R. Para los datos históricos, se utilizarán los datos en barras de 1 minuto proporcionados por el broker XTB, y que serán agrupados en barras de distintas longitudes (5m, 15m, 30m, etc).

Si alguien tiene interés en conseguir una copia del código, puede ponerse directamente en contacto conmigo y se la haré llegar por correo electrónico.

Depuración

Se ha comprobado el comportamiento correcto del sistema en los siguientes supuestos:
  • Entradas en largo y en corto
  • Re-entradas correctas después de una salida debido a un stop loss

Para las pruebas se ha utilizado una media móvil corta de 5 barras (una semana), una media móvil intermedia de 11 barras (medio mes), y una media móvil larga de 22 barras (aproximadamente un mes). El sistema se prueba sobre barras diarias para el símbolo EURUSD, durante los años 2010 y 2011. Nótese que cada vez que se ha encontrado un error, y se ha procedido a su corrección, la totalidad de los casos de prueba han sido repetidos (regression testing).

Los supuestos de prueba han sido articulados según los siguientes casos:

  • Entradas en largo
  • Entradas en corto
  • Re-entrada después de SL
  • Entrada incial
A modo de ejemplo, se muestran los resultados de las pruebas correspondientes al caso de entradas en largo:

Caso 1: Entrada en largo

El caso 1 se centra en la comprobación de las entradas en largo.

Objetivo: Comprobar que cuando la media móvil corta cruza al alza a la media larga se abre una nueva posición en largo, con el stop loss adecuado, y se cierra la posición en corto si la hubiera.

Resultado Esperado: Cierre y apertura de una nueva posición.

Resultado Obtenido: En el gráfico se puede observar que el cruce de la media móvil corta al alza sobre la media móvil larga se produce el 17/6/10. En este momento se cierra la posición que teníamos abierta en corto, y se abre una nueva posición en largo, con el correspondiente SL situado en la media móvil intermedia.






martes, 21 de mayo de 2013

¿Cómo saber si un sistema es rentable? (2)

-->
Continuamos con esta serie de entradas en la que explicamos nuestra metodología, basada en los trabajos de Robert Pardo, para decidir a priori si un sistema es o no rentable.

Formulación

El primer paso en la definición de un sistema de trading es especificar de forma clara y concisa cual es la idea de inversión subyacente. Una vez especificada la idea que se pretende implementar, se deben detallar la lista de indicadores técnicos que se utilizarán en su implementación, indicando cual es la función de cada uno dentro de la idea global del sistema. Así mismo se deberán especificar claramente, y sin ambigüedades, cuales son las reglas de entrada y salida del marcado, idealmente mediante pseudocódigo. A continuación se describirán los filtros, si es que existen, que serán aplicados a dichas reglas de entrada y de salida, y cual es el efecto esperado de cada uno. Finalmente se deberá detallar la política de gestión del riesgo (stop loss o similar) y de gestión monteraria (tamaño de las posiciones, recogida de beneficios, etc.) que serán utilizados como parte del sistema.

Por tanto, una correcta formulación del sistema se debe cubrir los siguientes aspectos:

  • Entradas y salidas
  • Gestión de riesgo
  • Gestión monetaria

Ejemplo: Cruce de Dos Medias Móviles

El sistema Cruce de Dos Medias Móviles (abreviado como CDMM) es un sistema de seguimiento de tendencia basado en el cruce de dos medias móviles: una media móvil corta y una media móvil larga. Cuando la media móvil corta cruza al alza a la media móvil larga, nos ponemos en largo, y cuando vuelve a cruzar a la baja, cerramos la posición. Igualmente, pero a la inversa, sucede para el caso de las posiciones en corto.

Indicadores Técnicos

El sistema CDMM se basa en el uso de dos indicadores técnicos:

  • Media móvil de corta duración
  • Media móvil de larga duración

El objetivo de la media móvil corta es seguir estrechamente los movimientos del símbolo, pero proporcionando una señal atenuada que facilite el análisis de su comportamiento. La media móvil corta nos evita, por tanto, falsas señales de entrada y salida en el mercado debido a los movimientos bruscos y de corta duración que suceden en los mercados.

El objetivo de la media móvil larga es determinar la tendencia del mercado: bajista o alcista. Para que sea efectiva debe tener una longitud relativamente larga, para que pueda coger las tendencias en su totalidad, y no se salga del mercado en los retrocesos.

Existen multitud de tipos de medias móviles que pueden ser utilizadas en el sistema CDMM: medias móviles simples, medias móviles exponenciales, medias móviles con ponderación lineal, etc. Sin embargo, según la literatura existente, no está claro que al variar el tipo de media móvil se pueda obtener una mejora significativa de los resultados del sistema. Por tanto, y para no aumentar innecesariamente el número de parámetros a optimizar, el tipo de media móvil a utilizar será fijado en medias móviles simples.

El cálculo de la media móvil se puede aplicar a distintos tipos de precios: cierre, alto, bajo, apertura, media, típico y ponderado. Según qué mercados, aplicar el indicador sobre un tipo de precio u otro puede variar significativamente el resultado del sistema. Por ejemplo, en los mercados regulados de acciones el precio de cierre de la sesión es un dato muy importante a tener en cuenta (subasta final). Sin embargo, en el mercado de divisas, al ser un mercado continuo, el precio de cierre de una barra pierde parte de ese significado especial. Por tanto, las medias móviles de este sistema serán calculadas sobre el precio medio de cada barra (la suma de los precios máximo y mínimo dividida por dos) al entender que este valor es el que mayor información proporciona sobre el contenido de dicha barra.

Reglas

Sea M(i) el valor de la media móvil larga en la barra i, y m(i) el valor de la media móvil corta en la barra i. El sistema CDMM se basa en las siguientes reglas:

  • Si m(i) >= M(i) y no tenemos ninguna posición abierta, entonces podemos abrir en largo.
  • Si m(i) >= M(i) y estamos en corto, entonces podemos cerrar la posición.
  • Si m(i) < M(i) y no tenemos ninguna posición abierta, entonces podemos abrir en corto.
  • Si m(i)< M(i) y estamos en largo, entonces podemos cerrar la posición.
  • El sistema no entrará en el mercado hasta que no se produzca el primer cruce de medias. Igual sucede con las re-entradas después de que una posición haya sido cerrada por un stop loss.

Stop Loss y Take Profit

Siguiendo la máxima de cortar las pérdidas cuanto antes, y dejar correr los beneficios, se utilizará un Stop Loss ajustado, pero suficientemente amplio para no salirse de las posiciones debido a los movimientos aleatorios del mercado. Para el cálculo del stop loss se utilizará una tercera media móvil de longitud intermedia, es decir, mayor que la media móvil corta, pero menor que la media móvil larga. Habitualmente en estos casos se utiliza un stop loss basado en algún indicador de volatilidad como el ATR. Pero en el sistema CDMM este tipo de indicadores serían rendundantes ya que el objetivo de la media móvil corta es precisamente filtrar la volatilidad que pudiera tener el símbolo. Nótese que cuando se cierra una posición debido al salto de un stop loss no se podrá volver a abrir una nueva posición hasta que se produzca un nuevo cruce de las medias móviles.

No se accederá al recurso de recoger beneficios con un Take Profit.

Filtros Aplicables

No se utilizarán filtros adicionales en esta estrategia.

jueves, 16 de mayo de 2013

¿Cómo saber si un sistema es rentable? (1)

-->
El principal problema al que se enfrenta el desarrollador de sistemas de trading quantitativo es el de determinar a priori si un sistema de trading es rentable o no lo es. Para ello, el desarrollador cuenta con la herramienta de las simulaciones históricas, es decir, comprobar si el sistema hubiera proporcionado beneficios de haberse utilizado en algún periodo de tiempo pasado. Sin embargo, aunque el sistema demuestre ser rentable en periodos de tiempo pasados, siempre nos quedará la duda de si lo que hemos encontrado es precisamente eso, un sistema capaz de describir a la perfección el pasado, pero con habilidad nula para predecir el futuro. Este riesgo es aun mayor si hemos utilizado algún tipo de optimización en el desarrollo de nuestro sistema, ya que existe el riesgo de caer en una sobre-optimización del mismo. Y precisamente, evitar las sobre-optimizaciones, es una de las tareas más difíciles a las que se enfrentan los desarrolladores de sistemas.

Al día de hoy, la mejor metodología para desarrollar un sistema, y determinar a priori si será o no rentable en la operativa real con cierto grado de confianza, es la metodología propuesta por Robert Pardo en su libro “The Evaluation and Optimization of Trading Strategies”. Sin embargo son muchos más los detractores de la metodología de Pardo que sus seguidores, y son muchas las críticas que ha recibido. A mi entender la mayoría de las críticas se deben a una incorrecta interpretación de las ideas que plantea Pardo. El problema es que el libro tiene importantes carencias: está sobre-escrito, los contenidos están algo desorganizados, y se hecha de menos algunos ejemplos concretos de desarrollo de estrategias que clarifiquen los conceptos. Esto obliga a que sea necesario releer el libro varias veces (en mi caso llevo ya 6), antes de comprender bien las ideas de Pardo.

Para intentar corregir este problema, en esta serie de entradas voy a describir la metodología de Robert Pardo (con algunas mejoras de mi propia cosecha), paso a paso, y con un ejemplo concreto, para que no quede ningún tipo de dudas sobre qué es lo que hay que hacer exactamente. Evidentemente, nuestra plataforma Entropycs [http://www.entropycs.com] (de la que en breve daremos noticias) proporciona todas aquellas herramientas que son necesarias para poner en práctica esta metodología.

La estrategia que vamos a utilizar como ejemplo es una estrategia muy simple basada en el cruce de dos medias móviles. Y como buen punto de partida de nuestro documento de descripción y análisis de la estrategia, recomiendo empezar escribiendo una pequeña introducción donde se explique brevemente cual es la idea subyacente a la estrategia. Allá vamos.

Introducción

El sistema Cruce de Dos Medias Móviles (abreviado como CDMM) es un sistema de seguimiento de tendencia basado en el cruce de dos medias móviles: una media móvil corta y una media móvil larga. Cuando la media móvil corta cruza al alza a la media móvil larga es una señal de que nos encontramos ante una tendencia al alza, como muestra la siguiente figura:


Y cuando la media móvil corta cruza a la baja a la media móvil larga, probablemente nos indique el inicio de una tendencia a la baja:


Los sistemas basados en el cruce de medias móviles son ampliamente conocidos entre los desarrolladores, pero ello no significa necesariamente que no puedan ser rentables cuando son configurados correctamente.

La principal desventaja de los sistemas de trading basados en el cruce de medias móviles es que cuando el mercado está lateral se producen muchas falsas señales de entrada que causan importantes pérdidas. El sistema CDMM intenta corregir este problema aplicando la máxima del trading de cortar cuanto antes las pérdidas y dejar correr los beneficios, con el objetivo de que los beneficios recogidos en las tendencias compensen ampliamente las pérdidas producidas durante los periodos de mercado lateral.


Actualmente existen innumerables extensiones y mejoras que pueden ser aplicadas a los sistemas basados en el cruce de medias móviles (triples medias, varios tipos de caracterizaciones, combinación con otros indicadores, etc.), pero dichas extensiones no serán analizadas en el presente documento, al entender que la mayoría de ellas aportan poco, o muy poco, al rendimiento del sistema básico.