A las buenas,
Voy a intentar explicar el asunto de cómo se puede acceder a los datos, medias, etc. de un gráfico de minutos desde un gráfico de ticks en un sistema de Visual Chart. Lo explicaré desde cero para que lo pueda aprovechar cualquiera.
Como sabemos, los ticks se corresponden con cada una de las operaciones que se van ejecutando en el mercado sobre un simbolo concreto. Cada compra o venta produce un tick y no existe ninguna relación entre ticks y tiempo. En un periodo de 1 minuto se pueden producir 20 o 200 ticks, según lo animado que esté el cotarro.
Visual Chart ejecuta el sistema cada vez que se cierra una barra (en realidad también lo hace cada vez que se ejecuta una orden limitada o en stop que hayamos puesto en el mercado, lo que da no pocos problemas).
Por lo tanto, hasta que no se cierra la barra no tenemos la oportunidad de tomar decisiones. En un gráfico de 1 minuto, por ejemplo, puede no ser problemático porque el mercado no se suele mover mucho en ese tiempo (desde luego depende del producto y la hora). Pero en un gráfico de 30 minutos, puede que la entrada o salida sea tan tardías que no valga la pena ni hacerlas.
Para aprovechar la inmediatez de los ticks que se van produciendo cada vez que alguien compra o vende, es preciso trabajar sobre el gráfico de ticks, insertando en él el sistema.
No es lo mismo que el gráfico sea de 1 tick o de varios. En el caso de 1 tick, obviamente no tenemos precio de apertura o cierre, porque la "barra" es para esa única operación. Si queremos usar sistemas que hacen referencia a dichos precios, es mejor usar una cierta compresión en los ticks. Si usamos, por ejemplo, 5 ticks, tenemos una cercanía al precio casi igual a la de 1 tick y además el sistema es mucho más rápido al cargar en memoria 5 veces menos información.
Dado que no es posible convertir mediante una fórmula los parámetros de un indicador de minutos a ticks, la técnica a utilizar sería:
1 - Abrir el gráfico de x ticks con el símbolo sobre el que vamos a operar.
2 - Abrir en memoria el gráfico de minutos con el mismo símbolo (en este caso da igual si el simbolo es el contínuo o el del vencimiento porque no vamos a operar sobre él, sólo vamos a usar sus datos para calcular las medias).
Esto se puede hacer mediante el siguiente código:
Código: Seleccionar todo
KKK = .GetSymbolIdentifier("010015ED", 60, crMinutos, "31/10/2005", "31/12/2007")
La variable KKK (o como queramos llamarla) debe existir y ser de alcance público, así que hay que declararla mediante un Dim en la sección de declaraciones (donde los parámetros, etc).
En este caso estamos abriendo en memoria un "gráfico" del bund en 60 minutos y entre las fechas indicadas.
3 - Abrir en memoria las medias deseadas a partir de los datos recién cargados:
Código: Seleccionar todo
MediaMax = .GetIndicatorIdentifier(AvExponential, KKK, 2, PriceHigh)
MediaMin = .GetIndicatorIdentifier(AvExponential, KKK, 2, PriceLow)
MediaTendencia = .GetIndicatorIdentifier(AvTriangular, KKK, 30, PriceClose)
Las variables MediaMax, etc.deben estar declaradas al igual que KKK, claro.
4 - Usar estas medias como haríamos habitualmente. Por ejemplo:
Código: Seleccionar todo
If .GetIndicatorValue(MediaMax) > .GetIndicatorValue(MediaTendencia) Then ...
De esta manera estamos tratando las medias de un gráfico de 60 minutos según se van calculando desde un gráfico de x ticks.
En fin, me ha salido un pedazo tocho de tres pares de narices. La cosa es sencilla como se ve. Si hacen falta aclaraciones, por aquí andamos...
Un saludo
