Pautas básicas para el diseño de estrategias de trading utilizando el filtrado de datos

CODIFICACIÓN

Una vez que tenemos las reglas del sistema descritas, y están organizadas de una forma lógica, el siguiente paso será codificar el sistema en un lenguaje que pueda ser interpretado por nuestra plataforma de trading, con la finalidad de evaluar su funcionamiento.

A día de hoy existe una variedad de software enfocado al diseño y evaluación de sistemas, TradeStation, MultiCharts, Whealt-Lab, Metastock o NinjaTrader, son algunos de los programas destinados a ello. Cada uno posee su propio lenguaje de programación con sus ventajas y sus desventajas. Al margen de la plataforma seleccionada, las reglas del sistema deberán ser convertidas en un script específico, requerido por el programa, que permita tanto la operativa en tiempo real como la evaluación histórica de la estrategia.
La codificación del sistema debe ser realizada de tal modo que el algoritmo pueda ser fácilmente interpretado, debe mantener una estructura ordenada, sencilla, y coherente que permita su compresión. Por regla general, siempre y cuando el software lo permita, actuaremos siguiendo estos cuatro pasos:
1. Descripción del funcionamiento de la estrategia (opcional). Realizaremos una breve descripción de la actividad del sistema, resumiendo de forma general, en qué consisten las reglas de entrada y salida.
2. Creación de parámetros y declaración de variables internas. Declararemos los parámetros que precisa su desarrollo. Dichos parámetros nos permitirán modificar y optimizar las variables del sistema una vez esté diseñado. En este apartado también declararemos las variables internas que serán necesarias para el desarrollo del mismo. Estas variables son utilizadas para almacenar cálculos que serán requeridos en el código del sistema.
3. Bloque de código destinado a la visualización de indicadores (opcional). Algunas plataformas tienen un apartado destinado a la adición de los indicadores que serán visualizados en el gráfico al implementar la estrategia. Por regla general, siempre que el software lo permita, añadiremos dichos indicadores. Aunque este punto puede parecer poco relevante, es de gran importancia, al facilitar notablemente el trabajo cuando necesitemos comprobar si las órdenes se ejecutan según lo establecido. Esto es particularmente importante en sistemas que utilizan múltiples indicadores.
4. Bloque de código que contiene las reglas de entrada y salida. En este punto añadiremos finalmente las instrucciones necesarias que contienen las reglas de entrada y salida. Este bloque de código suele estar dividido, por lo general, en tres apartados:
a. Bloque I. Cuando la estrategia no tiene posiciones en el mercado. Contendrá las instrucciones necesarias para posicionarse largo o corto en el mercado.
b. Bloque II. Si la estrategia tiene una posición larga. Este apartado contendrá las instrucciones necesarias para cerrar dichas posiciones, y si es necesario, para abrir posiciones en la dirección opuesta (p. ej. Sistemas Stop and Reverse)
c. Bloque III. Si la estrategia tiene una posición corta. Exactamente lo mismo pero al contrario.

Hasta ahora hemos visto de forma teórica cómo debería estar organizado el código. A continuación, vamos a ver un ejemplo de cómo podríamos codificar las reglas del sistema vistas en el apartado anterior. En este ejemplo, la programación ha sido realizada empleando el lenguaje NinjaTrader, NinjaScript. En la figura 1 podemos observar que lo primero que hemos realizado es una breve descripción del funcionamiento del sistema, y seguidamente, hemos declarado los parámetros que necesitaremos para su desarrollo. En esta ocasión el sistema no requiere declarar variables internas, en caso contrario, deberían ser añadidas en este apartado.

En el siguiente apartado hemos añadido cuatro líneas de código que nos servirán para visualizar los indicadores de la estrategia cuando sea implementada en un gráfico. En este mismo apartado, utilizamos el método SetStopLoss para que el Stop Risk sea situado en el momento en el que una operación haya sido abierta. Por último, también se ha establecido la propiedad CalculateOnBarClose como true, para que la estrategia recalcule el algoritmo cada vez que haya finalizado una barra.

A continuación incluiremos, una sentencia que impedirá que el código del sistema sea calculado si no hay suficientes barras en el gráfico. En este punto, exigimos que el número de barras transcurridas sea igual o mayor al número de barras necesarias para el cálculo de la media móvil exponencial. Seguidamente, tenemos el bloque de código necesario para abrir posiciones largas o cortas cuando la estrategia no tenga ninguna posición en el mercado.

Por último, tendremos las instrucciones necesarias para cerrar posiciones largas o cortas cuando el precio rebase el Target Profit basado en el ATR.

Llegados a este punto el código estaría finalizado.
Como podemos observar, en el proceso de codificación de este sistema han sido realizados, de forma consecutiva, todos los puntos aquí mencionados. Hemos visto cómo estructurar el código de un sistema sencillo, que no conllevaría un elevado número de reglas. En caso de tener que programar un sistema de mayor complejidad, el procedimiento para estructurar el código sería exactamente el mismo.