Estrategias en VisualChart 6. Uso de varias compresiones.

En el desarrollo de una estrategia de inversión, puede interesarnos tener en cuenta las señales dadas en distintas compresiones de tiempo para la toma de decisiones.

Por ejemplo, podemos buscar entrar largos con el cruce alcista de los precios sobre una media de 30 en una compresión de 5 minutos y a su vez que lo confirme una segunda media de 30 en una compresión mayor, de 60 minutos.

Esto es posible implementarlo dentro de una estrategia en Visual Chart 6: Siempre que pongamos dos gráficos en la misma ventana, la estrategia sobre el gráfico de 5 minutos puede leer los datos del gráfico mayor (60 minutos) y por tanto, también puede acceder a cualquier media insertada sobre éste.

A continuación vamos a analizar cómo llevarlo a cabo y a destacar sus particularidades.

Desarrollo de la programación

Para poder trabajar con dos compresiones de tiempo sincronizadas, es necesario configurar el siguiente escenario:

1. Debemos abrir una ventana con el gráfico de menor compresión a usar. Este gráfico será sobre el que operemos.
2. Debemos insertar un segundo gráfico en la misma ventana con la compresión mayor.

El resultado es el siguiente:




Cuando desde el entorno de programación queremos acceder a los datos de dos gráficos, haremos uso de los elementos comunes, pero sencillamente especificamos que el objeto Historic es Data cuando queremos extraer los datos de la compresión menor o Data2 cuando queremos extraer los datos de la compresión mayor.

Ejemplo (VB.NET):
Dim cierreact As Double = Me.Data.Close() 'último cierre de la compresión de 5m.
Dim cierreact_60m As Double = Me.Data2.Close() 'último cierre de la compresión de 60m.

Cuando lo que queremos es trabajar con indicadores insertados en cada una de las compresiones, el proceso es exactamente igual: Es decir, aplicamos las misma funciones pero especificamos sobre qué fuente irá insertado el indicador.

Ejemplo (VB.NET):
''' <summary>
''' media sobre el gráfico de 5M
''' </summary>
''' <remarks></remarks>
Dim Media5MData As AvSimple


''' <summary>
''' media sobre el gráfico de 60M
''' </summary>
''' <remarks></remarks>
Dim Media60MData As AvSimple

''' <summary>
''' This method is used to configure the strategy and is called once before any strategy method is called.
''' </summary>
Public Overrides Sub OnInitCalculate()
Me.Media5MData = New AvSimple(Me.Data, Me.period)
Me.Media60MData = New AvSimple(Me.Data2, Me.period)
End Sub

Ejemplo estrategia con dos compresiones de tiempo

A continuación les facilitamos un ejemplo en VB.NET de cómo diseñar una estrategia con dos compresiones temporales:
Inherits StrategyPlugin
' Parameter format example
''' <summary>
''' Your parameter description here.
''' </summary>
<Parameter(Name:="Periodo", DefaultValue:=30, MinValue:=2, MaxValue:=100, Step:=1)>
Private period As Integer
''' <summary>
''' media sobre el gráfico de 5M
''' </summary>
''' <remarks></remarks>
Dim Media5MData As AvSimple
''' <summary>
''' media sobre el gráfico de 60M
''' </summary>
''' <remarks></remarks>
Dim Media60MData As AvSimple
''' <summary>
''' This method is used to configure the strategy and is called once before any strategy method is called.
''' </summary>
Public Overrides Sub OnInitCalculate()
Me.Media5MData = New AvSimple(Me.Data, Me.period)
Me.Media60MData = New AvSimple(Me.Data2, Me.period)
End Sub
''' <summary>
''' Called on each bar update event.
''' </summary>
''' <param name="Bar">Bar index</param>
Public Overrides Sub OnCalculateBar(ByVal Bar As Integer)
Dim cierreact As Double = Me.Data.Close()
Dim cierreact_60m As Double = Me.Data2.Close()
If (cierreact_60m > Me.Media60MData.Value()) Then
If (cierreact > Me.Media5MData.Value()) Then
Me.Buy(TradeType.AtClose)
Else
Me.ExitLong(TradeType.AtClose)
End If
End If
End Sub

Particularidades del uso de dos compresiones de tiempo

Un aspecto muy importante a la hora de trabajar con dos compresiones en una estrategia, es que no debemos de olvidar que los datos de cada barra no se obtienen hasta que no finaliza dicha barra.

Como sabemos, a la hora de operar con estrategias no podemos solicitar la información a la fuente hasta que la barra finaliza. Cuando se trabaja con dos compresiones, puede generarse la confusión de creer que podemos obtener la información virtual de la barra de compresión mayor antes de que su última barra finalice. Esto no sucede, y lo que tenemos es que sencillamente, entre el tiempo entre una barra y la siguiente, los datos de la compresión mayor se van repitiendo por cada barra de la compresión menor.

Veamos esto con un ejemplo:

Barra 60 minutos/Barra 5 minutos de las 9:00 horas. El valor de la media 60 minutos = 134,4

Barra 5 minutos de las 9:05 horas. El valor de la media 60 minutos = 134,4 (el mismo)

Barra 5 minutos de las 9:10 horas. El valor de la media 60 minutos = 134,4 (el mismo)

Barra 5 minutos de las 9:15 horas. El valor de la media 60 minutos = 134,4 (el mismo)

(...)

Barra 5 minutos de las 9:55 horas. El valor de la media 60 minutos = 134,4 (el mismo)

Barra 60 minutos/Barra 5 minutos de las 10:00 horas. El valor de la media 60 minutos = 133,8 (nuevo valor)

Esto es importante tenerlo en cuenta, sobre todo si comparamos los datos de la barra actual con los de la barra previa.

Si accedemos al valor del indicador aplicado al gráfico de 60 minutos en la barra anterior de 5 minutos:

Me.Media60MData.Value(1)

Según en la barra en la que estemos, obtendremos efectivamente el valor anterior del indicador, si estamos justo en la barra de 5 minutos que coincide con el cierre de una barra de 60 minutos (por ejemplo, a las 10:00 horas). Pero si estamos en mitad de camino entre una barra y otra de 60 minutos (por ejemplo, a las 9:45), tal y como hemos visto en el ejemplo, el valor devuelto será igual al valor actual (ya que el indicador de 60 minutos no ha cambiado entre una barra y otra de 5 minutos).

Comentarios

Entradas populares de este blog

Trading Tools: Descarga de históricos para Visual Chart 6

KDJ - Indicador Stochastic %J

El indicador Relative Strength Mansfield with Index