Contar las velas del gráfico es fundamental para la programación. Normalmente necesitaremos saber cuándo ha llegado una nueva vela. Si nuestro programa es un Expert Advisor la cosa es muy sencilla, pero cuando el programa es un indicador se complica ya que además de contar las nuevas velas tendremos que contar todas las velas anteriores para poder dibujar el indicador.
En el caso de un indicador el código típico sería:
// Contar número de velas int counted_bars = IndicatorCounted(); int pos = Bars - counted_bars; // Para cada vela... while(pos>=0) { // Dibujar algo en el indicador pos--; }
Aquí hay sólo dos funciones IndicatorCounted que nos dice cuántas velas hemos leido ya (al ejecutar el indicador hemos leido 0) y Bars que nos dice cuántas velas hay en el gráfico. Por eso la linea
int pos = Bars - counted_bars;
Nos sirve para guardar en la variable pos el número de velas que no hemos leido todavía y con las que tenemos hacer cualquier cálculo (habitualmente dibujar la linea del indicador para esa vela).
En el caso de un EA podemos conocer la llegada de una nueva vela (evento) utilizando la función Time, esta función nos va a decir el tiempo de apertura de una vela, si guardamos en una variable de fecha este tiempo y lo comparamos continuamente con el tiempo de apertura de la vela 0 sabremos cuándo ha llegado la nueva vela. El código es el siguiente:
static datetime MarcaTiempo = 0; datetime NuevaTiempo = Time[0]; if(MarcaTiempo != NuevaTiempo) { Alert("LLegó una vela nueva en el tiempo ",NuevaTiempo); MarcaTiempo = NuevaTiempo; }
La linea importante es la primera donde al tipo de dato datetime le aplicamos antes el modificador static para que no pierda el valor de un tick a otro.
