Ejemplo Excel Stop Dinámico

Como ya hemos comentado en anteriores entradas de este blog, Visual Chart dispone de una serie de herramientas denominadas Trading Tools con las cuales podemos diseñar aplicaciones que nos permitan automatizar procedimientos que hasta ahora realizamos manualmente.

Utilización de Stops Dinámicos

Como todos los usuarios saben, cuando entramos a mercado, es importante cubrir nuestras pérdidas mediante la activación de una orden en STOP que nos permita limitarlas.

Igual de importante es gestionar dicha orden de modo que, si la cotización se mueve a favor de nuestra posición abierta, tengamos la habilidad de modificar el precio de dicho STOP de modo que nos permita fijar un nivel mínimo de ganancias: Este cambio en la orden de pérdidas es lo que denominamos STOP DINAMICO o TRAILING STOP.

Cuando trabajamos con sistemas automáticos, es el propio sistema el encargado de gestionar el stop dinámico de la posición abierta.

Mientras que si trabajamos en manual, es labor del usuario realizar el seguimiento de los precios para determinar cuándo debe mover dicha orden.

Esta opción se hace mucho más llevadera con la versión 5 de Visual Chart, ya que dentro de la boleta de órdenes, encontramos una opción que nos permite considerar la orden que vamos a enviar como una orden de tipo Trailing:




Es decir, que tanto si trabajamos con Sistemas como si operamos Manualmente, tenemos cubierta la opción de trabajar con órdenes de tipo TrailingStop.

Pero ¿Y si hemos diseñado una aplicación a través de las Trading Tools con la que operamos? Pues bien, esta posibilidad también puede cubrirse sin mayor problema, como pueden ver a través del ejemplo que le facilitamos en este artículo y que pueden descargar desde el siguiente enlace:

Ejemplo Stop Dinamico Trading Tools

Este sencillo ejemplo puede servirle a nuestros usuarios dedicados a la programación de herramientas COM como base para sus propias aplicaciones.

Como hemos hecho con otros ejemplos, hemos escogido como interfaz cliente a Microsoft Excel, debido a su amplia divulgación y su fácil manejo.

La interfaz consiste simplemente en lo siguiente:

1. El usuario especifica los parámetros de entrada solicitados en pantalla:



2. Cuando pulsamos INICIAR, la aplicación se pone en marcha y lanza una orden a mercado en el sentido indicado en el parámetro Signo Entrada.

3. Automáticamente, se colocará en mercado la orden de stop dinámico que irá siguiendo a los precios.



Programación de la herramienta

Los aspectos principales de la programación son los siguientes:

1. Utilizamos un temporizador como motor de la aplicación. Con cada nuevo evento de tiempo, llamamos al método denominado NuevaIteracion.


Private Const conRunMacro = "Hoja1.NuevaIteracion"


'-- PROCEDIMIENTOS DEL TEMPORIZADOR
Private Sub StartTemporizador()
    'Iniciar el temporizador
    DatHora = Now + TimeSerial(0, 0, 1)
    Application.OnTime Earliesttime:=DatHora, Procedure:=conRunMacro, Schedule:=True
End Sub
Private Sub StopTemporizador()
    On Error Resume Next
    'desactivar el temporizador
    Application.OnTime Earliesttime:=DatHora, Procedure:=conRunMacro, Schedule:=False
End Sub


2. Desde dicho método gestionamos la actualización del precio de la orden en STOP


If Range("E9") <> 0 And Ultimo(0).IDStop <> "" Then
    If Range("E9") > 0 Then
        If CurrentP > PrecioTS Then
            PrecioTS = CurrentP
            PrecioSTOP = PrecioTS - CDbl(Range("F6"))
            Call g_Trader.ModifyOrder(Ultimo(0).IDStop, Ultimo(0).Volumen, 0, PrecioSTOP)
        End If
    Else
        If CurrentP < PrecioTS Then
            PrecioTS = CurrentP
            PrecioSTOP = PrecioTS + CDbl(Range("F6"))
            Call g_Trader.ModifyOrder(Ultimo(0).IDStop, Ultimo(0).Volumen, 0, PrecioSTOP)
        End If
    End If
End If


El método ModifiyOrder es el que nos permite avisar a VisualChart de que queremos cambiar el precio de la orden. También podemos modificar el volumen.

Para poder hacer usar este método, debemos guardar el campo identificador de la orden que queremos modificar. Este dato lo almacenamos desde el campo IDStop.

3. Los eventos OnTotal/OnPartial ExecutedOrder nos permiten detectar cuando se produce la ejecución total o parcial de las órdenes lanzadas. Cuando llega el aviso de ejecución total de la orden de stop, el sistema se detiene.


    ElseIf Order.OrderID = Ultimo(0).IDStop Then
        If Order.OrderSide = VCT_OS_Buy Then Range("E9") = Range("E9") + Order.Volume
        If Order.OrderSide = VCT_OS_Sell Then Range("E9") = Range("E9") - Order.Volume
        '--
        Ultimo(0).IDStop = ""
        PararSistema = True
    End If

Conclusión

La idea que perseguimos con este artículo, es la de acercarles una muestra más de cómo podemos usar las clases COM de Visual Chart para desarrollar aplicaciones que nos permitan automatizar aspectos cotidianos de nuestra operativa.

Comentarios

Entradas populares de este blog

Como consultar el GAP % de un conjunto de valores

Bollinger Volatility Oscillator N

MANEJO DE PLANTILLAS. Eliminar plantilla de un gráfico activa