Acceder
Diseño de estrategias: control cierre fin de sesión (I)

Diseño de estrategias: control cierre fin de sesión (I)

A la hora de diseñar una estrategia de trading, uno de los aspectos que tenemos que decidir es si la operativa debe finalizar cuando se produzca el cierre de sesión. En el presente artículo, vamos a plantearles un interesante método con el cual podremos gestionar esta circunstancia y añadirla a nuestras estrategias diseñadas en Visual Chart 5.

La gestión del cierre por fin de sesión

Cuando decidimos que queremos cerrar posiciones al finalizar la sesión (sistemas intradiarios), el método más común que solemos seguir es el de comprobar si cierta barra ha alcanzado un horario determinado. En términos de diseño, sería así:
 
En Visual Basic
visual basic
 
En la Plataforma Visual
visual chart
 
Como vemos, comparamos la propiedad Tiempo con un valor determinado que representa un horario en formato militar. En el ejemplo, hemos elegido las 22:00 horas, pero podría ser cualquier otro valor que decidamos.
 
No obstante, poner un valor fijo puede ser demasiado estático, ya que puede que queramos utilizar nuestra estrategia en mercados con un cierre de horario distinto. Para darle un carácter más dinámico a ésta posibilidad, se suele optar por incluir un nuevo parámetro de entrada que represente al horario y sustituir dicha variable por el valor estático:
 

En Visual Basic

trading

 

Aunque esta opción es muy válida, les vamos a proponer una idea mucho más versátil, puesto que a través de ella nuestras estrategias sabrán en todo momento el horario de cierre de cada mercado sin necesidad de tener que especificarlo manualmente. Sería así:

Uso de la función GetSymbolInfo()

Sin entrar en demasiados detalles, comentar simplemente que ésta función nos va a permitir conocer cierta información del producto financiero sobre el que apliquemos la estrategia

Esto se consigue gracias a que la función incluye un parámetro mediante el cual podemos decidir qué clase de información nos interesa. A continuación mostramos el listado de datos que podemos consultar en base al valor que le demos a dicho parámetro:

sistemas de trading

 

 

Como vemos, si seleccionamos la opción SbiFirstSessionEnd, podemos obtener directamente el horario de cierre del subyacente… ¡que es precisamente el dato que andamos buscando para cerrar los negocios a fin de día! Gracias a esto, no tenemos que añadir ningún parámetro, sino que simplemente extraemos el horario de dicha función y lo usamos en la condición previamente vista:

En Visual Basic

oscar cuevas

 
Lo que hemos hecho es:
  1. Incluir una variable local a la que hemos llamado endsession.
  2. Asignar a dicha variable el valor devuelto por la función, especificando en la función que queremos saber el horario de fin de sesión.
  3. Sustituir endsession por el parámetro que habíamos puesto antes.

En la Plataforma Visual:

visual

En PDV el proceso es algo más complicado. La función GetSymbolInfo() no aparece dentro del listado de funciones, por lo que para hacer referencia a ella debemos declararla como se muestra en la imagen. Mucho ojo, pues hay que añadir un punto antes de la función.

Gracias a esto, independientemente del mercado sobre el que actuemos, la estrategia cerrará posiciones en la última barra de la sesión:

visual chart sistemas
 
 

En la imagen vemos una estrategia a la que le hemos aplicado el diseño anterior. Como vemos, no incluye ningún parámetro horario, y sin embargo detecta cuál es el horario de cierre, en este caso, las 18:00 de la tarde, y cierre en ese momento.

Relativo a lo que sucede en tiempo real

Aprovechando que tratamos este tema, no quiero pasar por alto la importante diferencia que existe entre lo que observamos en backtesting y lo que sucede en real cuando usamos órdenes del tipo Al Cierre. Este tipo de órdenes de Visual Chart están muy bien para poder detectar la barra donde se cumplen las condiciones que establezcamos tanto de entrada como de salida, si bien, el punto de ejecución puede variar notablemente en función de la volatilidad del mercado

Me explico. Las órdenes AlCierre, en real, se envían cuando se produce el cambio de barra. Por tanto, en la mayoría de los casos terminan ejecutándose al precio de apertura de la barra siguiente:

barras

Esto supone que podemos sufrir un cierto margen de deslizamiento, el cual basta con integrarlo en los ajustes del sistema para tenerlo en cuenta a la hora de estudiar las estadísticas. 

Pero cuando usamos este tipo de órdenes para cerrar al final de sesión, la situación es más grave, puesto que si esperamos a la última barra para liquidar posiciones abiertas, hay muchas posibilidades de que la orden acabe ejecutándose al día siguiente, dejándonos abiertos de un día para otro.

analisis tecnico

 

Sí que es cierto que una vez finalizada la última barra se puede generar el tic de liquidación, pero corremos el riesgo de que dicho tic no se envíe o que nuestra orden no entre en ese momento.

La reflexión por tanto, sería que, para evitar sorpresas, deberíamos modificar el horario de cierre para que la liquidación del negocio abierto se produzca una barra antes del cierre de sesión, así sabremos con certeza que tenemos margen suficiente para que se liquiden las posiciones abiertas.

¿Quiere decir con esto que todo lo explicado anteriormente no nos sirve de nada? Pese a lo que puedan pensar, sí que nos va a servir, ya que al igual que hemos detectado automáticamente el horario de la última barra de cada sesión, también podemos detectar el horario de la penúltima barra

En el siguiente artículo de éste blog explicaremos cómo poder hacer esto. ¡No se lo pierdan!

Oscar Cuevas

 

¿Buscas un bróker?

Logo de IGIG

Gran cantidad de subyacentes, con acceso a más de 17.000 mercados

Ver más
Logo de AvaTradeAvaTrade

Importante oferta de futuros y opciones financieras

Ver más
Logo de EToroEToro

Dispone de más de 5.000 productos de inversión entre acciones, ETFs y criptomonedas

Ver más
  1. en respuesta a Sirkiu
    -
    #4
    21/09/15 09:32

    Efectivamente. Por eso es importante cuando diseñamos el backtesting tratar de acercarnos lo máximo posible a la realidad a fin de no llevarnos sorpresas a posteriori. En este sentido, siempre es preferible que hagamos un backtesting "pesimista" poniendonos en el peor de los escenarios. Si la estrategia obtiene buenos resultados aún en este escenario, tendremos una mayor seguridad de que funcionará bien durante el tiempo real.

  2. en respuesta a David Snchz
    -
    #3
    21/09/15 09:29

    Estimado David. No tendría mucho sentido, ya que sería algo así como decirle que actúe hacia atrás en el tiempo. Esto en backtesting podría hacerse, pero luego en operativa real no sería posible. Cuando tratemos el modo de localizar el horario de la penúltima barra verán que es bastante sencillo.

  3. #2
    16/09/15 17:55

    Muy interesante, el deslizamiento es un gran problema a tener en consideración y sobre todo depende de las contrapartidas de algunos mercados, porque los resultados de un backtesting a real puede diferir una barbaridad.

    Estaremos atentos al siguiente post.

  4. #1
    11/09/15 09:17

    Hola Oscar!

    ¿Y no se puede progamar que coja la barra de cierre de la sesión pero que actúe en la barra anterior a ésta?

    Un saludo!

Definiciones de interés