Diseño de Sistemas Automáticos de Trading.

Diseñar un sistema consiste en analizar y estructurar una forma o método de operar en los mercados siguiendo una estrategia de manera sistemática El objetivo de este artículo es explicar una metodología que facilite la comprensión y automatización de un sistema, mostrar las distintas fases y componentes de la tarea de mecanizar un sistema puede permitir al lector formarse una idea más clarificadora de este “sector” del mundo de la inversión y especulación. Poder diseñar tu sistema, el sistema que cada día ejecutas delante de la pantalla, facilita enormemente el siguiente paso: su automatización, ¡Sí!, es posible mecanizar un sistema de inversión, es posible mecanizar una estrategia especulativa en los mercados, pero antes de nada vamos a ver porqué es aconsejable el diseño de un sistema de trading. Antes de entrar en materia, es bueno entender sus principales ventajas: ¿Por qué es importante la fase de Diseño? 1. Racionalizar la estrategia, no conviene dejar ningún supuesto al azar 2. Identificar los componentes y variables que dan vida al sistema 3. Documentar nuestras ideas o estrategias de trading ¿Qué beneficios obtenemos del Diseño? 1. Nuestros sistemas estarán mejor pensados, mejor preparados, en definitiva más robustos 2. Nos servirá como guía o plan de trading 3. Facilitará su automatización en posteriores fases Diseñar un sistema no es ni más ni menos que analizar y estructurar una forma o método de operar en los mercados, por lo tanto solo será posible si sabemos que seguimos una estrategia repetidamente o mejor dicho, sistemáticamente. Como punto de partida tendremos esa estrategia que ponemos en práctica cada vez que operamos o esa idea que hemos leído en alguna web o foro, en este artículo no os voy a contar ninguna estrategia en concreto, en lugar de eso os voy a dar algunas pautas y recomendaciones sobre cómo plasmarla en un papel para que pueda ser automatizada por uno mismo o por un tercero. Empecemos por la definición de sistema. De la RAE en su primera acepción de la definición de sistema: 1. m. Conjunto de reglas o principios sobre una materia racionalmente enlazados entre sí. En nuestro caso la “materia” está más que clara: el Trading, por “conjunto de reglas” poco que añadir, excepto la necesidad de que un sistema cumpla con ciertas pautas o reglas para las cuales fue creado, en cuanto a “racionalmente enlazados entre sí” nos exhorta a seguir una determinada lógica y coherencia en su conjunto. Muy científico y muy genérico, pero más concretamente y llanamente ¿qué es para nosotros?, ¿qué entendemos por sistema de trading automático? Visto desde fuera un sistema de trading automático es una caja negra alimentada por una serie de datos que acaban transformándose en operaciones en el mercado produciendo resultados económicos en nuestra cuenta, si lo representamos de forma gráfica:
Figura 1: Entradas y salidas de un sistema automático de trading
En la figura 1 podemos observar una caja opaca que esconde las reglas o lógica del sistema y donde figuran sus entradas y salidas, por una parte tenemos como entrada los datos provenientes de los mercados (cotizaciones, volumen negociación, etc.) y por otra también tenemos los parámetros de configuración del sistema que nos servirán para realizar los ajustes a las condiciones particulares del instrumento. Por otro lado y respecto la salida tenemos los resultados, básicamente son de dos tipos, los resultados históricos que son datos estadísticos basados en las operaciones realizadas sobre el histórico de cotizaciones también denominado backtesting, y los reales, ya que cuando empezamos a operar con el sistema los resultados pasan de ser históricos a cargarse en nuestra cuenta en forma de pérdidas y ganancias. Un sistema de trading antes de convertirse en una caja negra ha pasado por varias etapas antes de llegar al usuario o consumidor final (aunque sea uno mismo) como son el diseño, desarrollo, pruebas, optimización y puesta en marcha. Como he comentado previamente hemos de partir de una estrategia o idea de trading para proceder a su diseño.
Figura 2: Fases o ciclo de elaboración de un sistema de trading
En la figura 2 vemos un esquema de los pasos que se siguen para completar la automatización de un sistema, si bien, no es lineal puesto las fases de pruebas y optimización se retroalimentan, sí nos permite hacernos una idea del trabajo que conlleva. Los elementos clave a tener en cuenta para el diseño básicamente son tres: las variables de trabajo, la gestión de la entrada y la gestión de la salida. Las variables de trabajo son aquellos datos imprescindibles para llevar a cabo nuestro trading o la construcción del sistema, bajo mi punto de vista hay dos tipos de variables, las proporcionadas por el mercado o internas y las calculadas o externas. Las variables internas son la base de todo sistema pues podríamos ser capaces de automatizar cualquier sistema con solo basarnos en éstas. Las variables internas son básicamente cuatro: – El instrumento o instrumentos sobre los que se ejecutará nuestro sistema, por ejemplo el DAX, el Eurostoxx50 o el SP500. La mayoría de los sistemas se diseñan y optimizan para un determinado instrumento pero también nos podemos encontrar con sistemas configurados para ser usados en varios instrumentos aunque lo más común es el primer caso. A modo de recomendación el diseño de un sistema debe ser independiente del instrumento sobre el que se ejecutará, de esta manera en las fases de pruebas y optimización se podrá configurar para ejecutarse sobre múltiples instrumentos y así poder ejecutar nuestro sistema en tantos mercados y/o instrumentos como queramos. – El precio o cotización, este es el dato más utilizado, diría que el 99% de sistemas utilizan este dato para realizar las entradas y/o salidas. El precio normalmente está vinculado al instrumento puesto que no es lo mismo operar sobre el par EURUSD que operar con el SP500, mientras el primero cotiza en pips o decimales el segundo lo hace a nivel de puntos o para ser más exactos cuartos de punto. Como recomendación aquí para que el sistema sea independiente del precio (siempre que se utilice como filtro de entrada o salida) se debe añadir un parámetro de configuración a nuestro diseño donde se especifique el mínimo valor del Tick o movimiento del instrumento. Hay muchas herramientas en el mercado como Visual Chart o Ninja Trader donde los instrumentos ya vienen configurados con este valor mínimo, por lo que únicamente tendremos que consultarlo para aplicarlo a nuestro sistema en la fase de desarrollo. Ejemplos de utilización del precio en un sistema sería la comparación del valor del precio en un momento determinado (cierre > apertura) o la rotura de un rango de precios donde estaremos esperando que el precio llegue a un determinado nivel más un incremento. El precio se puede dividir en cuatro variables: el precio de apertura, el precio de cierre, el precio máximo y el precio mínimo debiendo estar vinculados a una dimensión temporal en concreto y de la que hablaremos más adelante. – El volumen es el número de transacciones cruzadas en un determinado momento del tiempo, este dato es común para todos los instrumentos ya que se evalúa en unidades. El volumen se puede tratar como si fuera un indicador más del sistema pero es un dato interno a tener en cuenta en el diseño, nos puede ayudar para confirmar tendencias (comúnmente llamado volumen concordante) o para detectar cambios en la volatilidad. – El tiempo o sesión es el dato que nos indica en qué horario cotiza el instrumento en el mercado, como podréis deducir es propio del instrumento y mercado pero en este caso podemos considerarlo como común ya que la variable tiempo debe estar dentro del rango de las 24hs para cualquier instrumento y mercado, con una salvedad, si nuestro sistema opera a una determinada hora o rango de horas entonces conviene tener esta variable como un parámetro más del sistema puesto que en este caso no tiene porqué coincidir con el resto de instrumentos y mercados. Como variables externas las hay para todos los gustos y de todos los colores, la mayoría de ellas, por no decir todas son independientes del instrumento. Normalmente están dentro de alguno de estos dos grandes grupos: – Los indicadores que en base a las variables internas y fórmulas matemáticas calculan determinados valores que utilizamos en nuestros sistemas y que tendremos en cuenta en nuestro diseño, un ejemplo sería el indicador RSI o el MACD. – Las variables de gestión del sistema, este grupo lo conforman aquellos datos que nos permiten adaptar nuestro sistema a nuestra manera de operar, básicamente nos servirán para controlar el riesgo. Las más utilizadas son el número de contratos, el capital disponible para operar, el número de operaciones, entre otras. Algunas de ellas serán parámetros de entrada para la configuración de nuestro sistema y otras serán calculadas automáticamente por el propio sistema. Todas las variables basadas en el precio de cotización o en el volumen (esto incluye los indicadores) se deberán indexar en el tiempo, al ser posible obtener su valor histórico (ayer, anteayer, etc.). Para plasmar de manera intuitiva y clara esta posibilidad en el diseño será necesario indicarlo por medio de un índice secuencial ordenado de más a menos reciente (0: hoy, 1: ayer, 2: anteayer y así sucesivamente) por ejemplo si queremos especificar que el precio de cierre de ayer tiene que ser positivo lo haremos mediante precio_cierre(1) > precio_apertura(1) Una vez vistas las variables de trabajo profundizaremos en los procesos y secuencia de ejecución de cualquier sistema: Figura 3. Componentes generales y flujo de un sistema automático.
Figura 3: Componentes generales y flujo de un sistema automático.
Según se puede observar en la figura 3 que es un zoom de la figura 1, vemos dos procesos bien diferenciados y cronológicamente dependientes: primero la gestión de la entrada en mercado, comúnmente llamado abrir posición y posteriormente la gestión de la salida o comúnmente llamado cerrar posición o toma de beneficios/pérdidas, son dos operaciones que se deben gestionar por separado por eso los vemos pintados en dos cajitas, claro está, existe una estrecha vinculación entre ellos pues sin el primero no se puede dar el segundo y viceversa. Gestión de la entrada: su objetivo es aplicar diversos filtros o establecer las condiciones que se deben dar para abrir una posición, también muchos sistemas incorporan como parte de este proceso la imprescindible gestión del capital o Money Management, otros pocos implementan procedimientos de control del riesgo para determinar si es aconsejable abrir una posición según el potencial ratio riesgo/beneficio de la misma. Gestión de la salida: su objetivo es aplicar diversos filtros o establecer las condiciones que se deben dar para cerrar una posición o abrir la contraria, procedimientos de control del riesgo (stop de pérdidas) y procedimientos para establecer el objetivo de ganancias (toma de beneficios). Estos dos procesos se alimentan de las variables explicadas anteriormente y de los parámetros de configuración con los valores asignados en el momento de habilitar el sistema para su ejecución o pruebas, pero además aparece un nuevo elemento que será de vital importancia para la labor de diseño y construcción del sistema: la dimensión temporal. Cuando operamos un determinado instrumento estamos pegados a la pantalla del ordenador, pero realmente ¿qué es lo que estamos observando? Una secuencia temporal de cotizaciones o dimensión temporal, todos los gráficos de las herramientas que hay disponibles en el mercado tienen la particularidad de permitirnos configurar la dimensión temporal de la serie de datos o cotizaciones que queremos observar, las más extendidas son: Mensual (M), Semanal (W), diaria (D) y las horarias (60m, 30m, 15m, 5m 1m) y esto tenemos que tenerlo en cuenta cuando procedamos al diseño de nuestro sistema. La dimensión temporal está vinculada a cada uno de los procesos descritos y más concretamente a los filtros o condiciones particulares, pudiendo tener una dimensión temporal para la entrada (por ejemplo que se cumpla una determinada condición al cierre diario) y otra diferente para la salida (por ejemplo que no se viole el mínimo de la primera hora de negociación) y rizando el rizo, podríamos incluso tener diferentes dimensiones dentro de un mismo proceso de entrada/salida, a modo de ejemplo imaginaros un sistema donde solo la apertura de una posición estará condicionada al cierre en positivo del día anterior y a la rotura del máximo de la primera hora de negociación para ponerse largo. A modo de recomendación y teniendo como máxima la simplificación del sistema, siempre es posible traducir un determinado filtro o condición a una dimensión más pequeña por lo que si nos encontramos en esta situación elegiremos como dimensión predeterminada la menor. Para terminar la fase de diseño necesitamos identificar las reglas o condiciones de nuestro sistema que estarán compuestas por grupos de filtros tanto para la entrada como para la salida y que definirán el comportamiento del sistema en el mercado. Esta es quizás la parte más difícil aunque con un poco de práctica es pan comido, vamos a ver algunos ejemplos para que quede más claro: Regla 1. Cruce de una media de 50 sesiones al alza: Variables: Precio e indicador Media_50 • Filtro 1: precio_cierre(1) <= Media_50(1) • Filtro 2: precio_cierre(0) > Media_50(0) Regla 2 El día anterior debe ser una ‘inside bar’ o el anterior a ésta es positivo: Regla 2.1 El día anterior debe ser una ‘inside bar’: Variables: Precio • Filtro 1: precio_maximo(1) < precio_maximo(0) • Filtro 2: precio_minimo(1) > precio_minimo(0) Regla 2.2 El día anterior al de la ‘inside bar’ tiene que ser positivo: Variables: Precio • Filtro 1: precio_apertura(2) < precio_cierre(2) Regla 3. Abrir posición a la rotura del máximo de la primera hora de negociación: Parámetros configuración: Primera_hora_negociacion Dimensión: 60m Variables: Precio y tiempo • Filtro 1: tiempo(0) = Primera_hora_negociacion • Filtro 2: precio(0) > precio_maximo(1) Ya solo nos queda plasmar en un papel todo lo que hemos ido viendo y lo haremos en una plantilla parecida a esta: Y lo acompañaremos de gráficos y del registro de operaciones donde se hayan obtenido resultados positivos y negativos. No solo es una valiosa herramienta y metodología que nos obliga a analizar y depurar nuestro sistema sino que además nos permite tener nuestros sistemas bien documentados y preparados para su automatización.