Introducción
A la hora de trabajar con sistemas de trading automático, es muy habitual hacer uso de estrategias prediseñadas o bien facilitadas por expertos, y a partir de éstas, realizar nuestras propias ideas según nuestro criterio y propia experiencia. Este método suele ser mucho más cómodo que empezar desde cero, ya que al partir de una base ya existente, ganamos en tiempo y disminuimos el riesgo de realizar un diseño equivocado.
En el presente artículo, vamos a exponer un ejemplo de éste procedimiento. Para ello, vamos a usar una de las estrategias públicas que podemos encontrar dentro de Visual Chart, el sistema llamado Resistance/Support System (en español puede aparecer con el nombre CaPivot Resistencia Soporte).
Definición del sistema
Para empezar, explicaremos el funcionamiento del sistema, ya que entendiendo cómo actúa podremos posteriormente tomar conclusiones.
Este sistema sigue la estructura clásica de las estrategias de tipo BandBreakouts: Para cada sesión, genera una combinación de niveles de soporte y resistencia, posicionándose a favor de la ruptura de las bandas.
Estos niveles dependen notablemente de un par de parámetros con los que cuenta el sistema, de modo que en función del valor que le demos a dichos parámetros los resultados del sistema pueden variar considerablemente.
Los parámetros en cuestión son StartHour y FinishHour. Estos dos parámetros, aunque aparecen como caracteres numéricos, realmente representan campos horarios, con la particularidad de que están definidos siguiendo el formato militar. Este tipo de formato es el que usa Visual Chart para definir el horario de cada barra (hhmm).
StartHour y FinisHour definen el intervalo horario de estudio. Para dicho intervalo, se calcula el máximo y el mínimo, los cuales serán, junto con el cierre, los campos base para calcular un punto pivote:
PivotPoint = (Maximo + Minimo + Cierre) / 3
¿Y para qué se usa este punto pivote? El valor obtenido es la referencia a partir de la cual se obtienen los niveles de soporte y resistencia que marcarán el precio de entrada a largos y cortos. Estos dos niveles se calculan según la siguiente fórmula:
R1 (resistencia) = 2 X PivotPoint – Minimo.
S1 (soporte) = 2 X PivotPoint + Maximo.
Como vemos, la idea es usar la fórmula del punto pivote, según la cual se considera éste punto como un punto de inflexión a partir del cual el precio reacciona. Si la teoría es cierta, cuando el precio supere a alguno de los dos niveles extremos (soporte o resistencia), se producirá una reacción favorable a la ruptura… aunque esto habrá que demostrarlo con números.
Una vez dentro de mercado, el sistema deshace posición si alcanza el horario fijado por el parámetro FinishHourSystem o bien si el precio supera el stop de pérdidas definido con el parámetro StopLoss.
En la siguiente imagen vemos el funcionamiento del sistema aplicado al futuro del MINI-IBEX 35:
El intervalo de estudio va desde las 11:00 hasta las 12:00. Se calculan S1 y R1 y finalmente el precio supera la resistencia R1. Se ejecuta la compra y en ese momento colocamos el stop de 50 puntos. A partir de ahí, o bien el precio rompe el stop de pérdidas o bien alcanza el fin de sesión, que es lo que ocurre en éste caso.
El sistema no permite realizar más de un negocio por sesión, de modo que una vez que ejecuta la orden de entrada no vuelve a realizar ningún nuevo negocio hasta el día siguiente.
Obviamente, se trata de un sistema apto para compresiones temporales de minutos, ya que en una compresión temporal diaria o superior carecería de sentido.
Ya hemos visto qué es lo que hace este sistema, pasemos a continuación a analizar su funcionamiento y ver si es susceptible de ser mejorado.
Análisis del sistema Resistencia/Soporte
Como hemos dicho, uno de los aspectos claves lo encontramos en el valor que le demos a los parámetros StartHour/FinisHour, ya que en función de estos quedarán definidos los precios de entrada.
El intervalo no debe ser ni excesivamente pequeño, puesto que entonces no será lo suficientemente representativa su ruptura, ni excesivamente grande, puesto que entonces, en caso de que se produzca una ruptura, puede ser que el movimiento que la provoca esté ya agotado.
En el ejemplo, hemos cogido un intervalo de tiempo de una hora, empezando a contar a partir de las 11:00, con el fin de despreciar los momentos de alta volatilidad propios del inicio de cada sesión. Estos valores son orientativos y lógicamente variarán en función de cada inversor, producto, periodo temporal y nivel de riesgos.
Con un adecuado intervalo horario, se pueden conseguir excelentes resultados. Por ejemplo, aplicado sobre el futuro del IBEX-35 Grande, con el mismo intervalo y con un stoploss de 80 puntos, el sistema Resistencia/Soporte obtiene la siguiente curva de ganancia para el periodo que va desde 2010 hasta 2014:
Un resultado lo suficientemente interesante como para que le dediquemos algo de nuestro tiempo al sistema.
Como es lógico, lo que nos interesa es disminuir el número de fallos. A fin de no desvirtuar las reglas del sistema, se nos ocurre aplicarle un stop dinámico que permita aprovechar algunas operaciones como la que mostramos a continuación:
La idea que perseguiremos consistirá en aprovechar esta clase de operaciones y además, disminuir el nivel de pérdidas en aquellos negocios negativos.
El proceso a seguir sería el siguiente: Incluiríamos un parámetro llamado Trailing que establezca una cantidad de puntos a conseguir. Si el precio alcanza este margen, cambiamos el stop de pérdidas fijo por un stop dinámico.
Siguiendo con el ejemplo de antes, si usáramos un Trailing de 60 puntos el funcionamiento sería el siguiente:
Una vez que hemos decidido qué cambio vamos a realizar en el sistema, procederíamos a cambiar el código. En este caso, se trata de un sistema diseñado con la Plataforma Visual. Si sabemos programar con ésta herramienta, podemos hacer el cambio nosotros mismos, y si no, podemos pedirle a alguien que nos realice el cambio. En cualquier caso partimos de un código ya hecho por lo que la modificación resultará mucho más sencilla.
Cambiando el código
Este apartado atañe exclusivamente al diseño de programación del sistema. Si abrimos el código, veremos que hay una parte donde se envían las órdenes de cierre en stop:
Esta es la parte que vamos a cambiar.
Lo que añadiremos será:
-
Parámetro Trailing que determiná los puntos a partir de los cuales activamos el stop dinámico.
-
Variable PriceTS donde guardaremos el precio más extremo alcanzado desde el momento de activación del trailing.
-
Variable PriceSTOP donde especificaremos el precio al que se enviará la orden stop de pérdidas.
-
Función GetBarSinceEntry() para detectar la barra de inicio de nuevo negocio.
A partir de estos campos, los pasos a seguir serán:
-
Inicialmente, la variable PriceSTOP se establece en función del precio de entrada y del valor del stop de pérdidas fijo.
-
Si estamos en la barra de inicio de nuevo negocio, actualizamos PriceTS a cero.
-
Mientras PriceTS valga cero, observaremos si se alcanza el margen de puntos estipulado. En caso de no alcanzarse, se mantiene el stop de pérdidas inicial.
-
Si se alcanza el margen, activamos el trailing e iniciamos PriceTS al precio más alejado del precio de entrada (máximo de la barra en largos y mínimo en cortos).
-
Desde el momento que activamos el trailing, iremos actualizando el valor más alejado. Además, actualizamos la variable PriceSTOP en función del precio PriceTS y del valor del parámetro Trailing.
En la siguiente imagen podemos ver cómo quedaría resuelto sobre el código:
Resultado Final
Una vez realizado el cambio, compilamos el sistema y procedemos a comprobar si la modificación propuesta supone una mejora o no. Para ello, extraemos la línea de ganancia del sistema, que sería la siguiente:
La conclusión es que hemos mejorado la pendiente de la línea de ganancia, disminuyendo la peor serie de pérdidas soportada. Pero por el contrario, el nivel de ganancias totales también ha descendido, por lo que deberemos sopesar si nos resulta rentable mantener el cambio o continuar con la versión original.
Últimas conclusiones
En este artículo, además de explicarles el funcionamiento del sistema Resistencia/Soporte (que está al alcance de cualquier usuario de Visual Chart), hemos visto un ejemplo de cómo podemos intentar mejorar las prestaciones de una estrategia, realizando algunas modificaciones y posteriormente comparando estadísticas.
Las estrategias que podemos encontrar de uso público suelen seguir una idea bastante sencilla, por lo que son un buen punto de partida para tratar de elaborar nuestras propias ideas y aplicar diferentes métodos de inversión que hayamos estudiado o que queramos poner a prueba.
Oscar Cuevas