Hablamos de sistemas escalonados cuando queremos referirnos a sistemas en los que se mantienen varias posiciones abiertas a la vez, como por ejemplo ocurre cuando se pretende piramidar a favor: una estrategia que use esta técnica va a ir añadiendo contratos, acciones, etc… conforme el precio va avanzando a favor de la tendencia esperada. Esta forma de trabajar tiene sus adeptos pero también sus detractores, en incluso quienes utilizan un tipo de estrategia inversa denominada promediar. En cualquier caso, diseñar un sistema en Visual Chart en el que se acumulen posiciones requiere de ciertos cambios en el código y en los ajustes del sistema que son específicos para ésta tarea, puesto que por defecto, los sistemas en Visual Chart no permiten la acumulación de contratos. En el presente artículo vamos a tratar éste tema mostrando un ejemplo de diseño piramidal.
Cómo acumular negocios en un sistema
Si tratamos de diseñar un sistema de tipo piramidal en Visual Chart, nos vamos a encontrar que no se nos permite.
Veamos un ejemplo: supongamos que entramos con 5 contratos cuando el precio cruza una media exponencial de 50 periodos. A partir de aquí, si el precio va a nuestro favor, aumentamos el número de contratos del siguiente modo:
- Si sube 5 puntos, volvemos a entrar con 3 contratos.
- Si sube 10 puntos, volvemos a entrar con 2 contratos.
- Si sube 20 puntos, volvemos a entrar con 1 contrato.
Una vez se acaba la tendencia (vuelve a cruzar el precio a la media), cerramos todos los contratos abiertos.
El sistema quedaría así:
Si se fijan, el sistema sólo comprueba si alcanza cada uno de los niveles siempre y cuando el precio asociado al nivel siga valiendo cero (precioB, precioC y precioD), así evitamos hacer más entradas de las que queremos hacer. Por último, cuando se produce el cambio de tendencia, enviamos una orden Cerrar Largo con -1 contratos porque cuando especificamos -1 en el número de contratos le estamos diciendo a Visual Chart que queremos cerrar todas las posiciones abiertas.
No obstante, cuando aplicamos el sistema sobre una gráfica, vemos que desprecia por completo los negocios siguientes al primero:
Esto se debe a que el programa, una vez estamos abiertos a largo, sólo permite ejecutar órdenes de entrada a corto o bien órdenes de cerrar largos.
Uso de etiquetas en los sistemas
El modo de solucionar éste problema es un proceso formado por dos pasos: en el primero, debemos acceder al código y asignar una etiqueta diferente a cada entrada. Esto permite darle un valor independiente a cada uno de los negocios que vamos a realizar. Para añadir etiquetas a las órdenes, pinchamos dos veces sobre cada orden de compra y modificamos el campo etiqueta:
Luego pulsamos Aceptar. Las etiquetas que vamos a asignar al ejemplo son las siguientes:
- Compra de 5 contratos: Etiqueta A
- Compra de 3 contratos: Etiqueta B
- Compra de 2 contratos: Etiqueta C
- Compra de 1 contrato: Etiqueta D
Tras esto, volvemos a compilar el sistema y lo volvemos a aplicar al gráfico.
En el segundo paso, ya con el sistema aplicado, accedemos a los ajustes del sistema (debajo de los parámetros, en la ventana de Propiedades) y debemos cambiar Método de Entrada y Número Máximo de Etiquetas. Y luego pulsamos Aceptar. Al hacer esto, permitimos al sistema que acumule por etiquetas y ahora sí veremos todos los negocios representados.
Gestión de negocios en sistemas escalonados
Uno de los principales inconvenientes de trabajar con etiquetas es debido a que la mayoría de funciones relativas a la gestión de la posición abierta no nos son de utilidad en estos casos. El motivo de esto es que dichas funciones están pensadas para sistemas que no permiten acumular, de ahí su limitación.
Por ejemplo, la función GetEntryPrice no nos puede decir cuál es el precio de entrada de cada uno de los negocios de forma independiente. Por su parte, la función GetMarketPosition sólo nos puede decir si, de forma global, estamos dentro o fuera de mercado, pero no si un negocio en concreto sigue abierto o no.
Esto puede ser un problema especialmente cuando tenemos la necesidad de saber el estado de cada uno de los negocios. Un modo de resolver esto consiste en hacer un seguimiento integral de los negocios. Vamos a verlo a través del ejemplo planteado.
Supongamos que queremos añadir un stop de pérdidas de 20 puntos para cada escalón. Es decir, queremos que, a lo sumo, cada negocio sólo pueda perder 20 puntos. Para ello, necesitaremos saber el precio de entrada de los 4 escalones, y además, saber si cada uno de ellos está abierto o no.
En el caso de sistemas que usan órdenes de entrada a mercado, obtener el precio de entrada es sencillo, ya que sería el valor que hemos asignado en el ejemplo a las variables precioA, precioB, precioC y precioD. Por tanto, ya disponemos de los precios de entrada.
Por otro lado, necesitamos otras 4 variables para controlar el estado de cada escalón. Vamos a crear las variables posicionA, posicionB, posicionC y posicionD. Con ellas vamos a saber si un negocio en concreto está abierto o cerrado. Para ello, seguiremos el siguiente criterio: si el negocio X está abierto, la variable posicionX será distinta de cero. Si el negocio X está cerrado, la variable posicionX valdrá cero.
El último grupo de variables que debemos añadir servirán para controlar la ejecución de las órdenes stops. Este grupo de variables las llamaremos pstopA, pstopB, pstopC y pstopD. En ellas vamos a almacenar el precio del stop de pérdidas.
A la hora de enviar cada uno de los stops de pérdida, comprobaremos si la variable posición correspondiente vale 1:
Es importante que todas las órdenes stop de pérdida sean accesibles en cada iteración. De ahí que el diseño de las flechas del diagrama debe de dar lugar a que se acceda a todas las órdenes independientemente de por donde avance el flujo del sistema.
También es importante que cada orden tenga asignada la etiqueta que le corresponda. Para ello, cuando estemos configurando las órdenes Cerrar Largo, debemos rellenar el campo etiqueta:
Hecho esto, el último paso será comprobar si el precio del subyacente ha alcanzado los precios stop de pérdida. Lo que pretendemos con esto es cambiar el valor de la variable posición en caso de que haya cambiado el estado del negocio.
En el ejemplo, como se trata de órdenes stop de pérdida a largo, analizaremos si el valor mínimo de la barra actual es inferior o igual a la variable correspondiente pstop:
Este paso lo debemos hacer al principio del diagrama de flujo.
Gracias a esto, cada uno de los negocios es totalmente independiente. Hasta el punto de que aún si ha saltado el stop de pérdidas, si posteriormente se produce una recuperación, el sistema va a tener la capacidad de repetir el escalón correspondiente:
Si además de utilizar stops de pérdida quisiéramos incluir objetivos de ganancia, el proceso sería similar en cuanto a la gestión de ruptura de niveles.
Aclarar por último que la orden Cerrar Largo con contratos a -1 no requiere de etiquetas y que permite cerrar todos los negocios tengan la etiqueta que tengan.
Espero que con éste ejemplo hayan podido comprender cómo poder diseñar un sistema con piramización a favor mediante el uso de etiquetas. Cabe decir, como siempre, que el sistema presentado tiene una finalidad puramente didáctica, y por tanto no puedo aseverar que dicho sistema aporte buenos o malos niveles de ganancia.
Oscar Cuevas
Visual Chart Group