Número de barras disponibles (Bars/iBars)

Una forma más corta de averiguar el número total de barras de una serie temporal por símbolo/periodo la proporcionan las funciones Bars y iBars (no hay diferencia entre ellas ya que iBars está disponible por compatibilidad con MQL4).

int Bars(const string symbol, ENUM_TIMEFRAMES timeframe)        

int iBars(const string symbol, ENUM_TIMEFRAMES timeframe)        

Las funciones devuelven el número de barras disponibles para el programa MQL para el símbolo y periodo dados. Este valor está influenciado por el parámetro Max. bars in chart en el terminal Options (véase la nota en la sección Aspectos técnicos de la organización y el almacenamiento de series temporales). Por ejemplo, si se descarga un historial en el terminal, que para un marco temporal específico es de 20 000 barras, pero el límite está fijado en 10 000 barras en los ajustes, entonces el segundo valor será decisivo. Inmediatamente después del lanzamiento del terminal, las funciones devolverán el número de 10 000 barras, pero a medida que se formen nuevas barras, aumentará (si la memoria libre lo permite). En MQL5, este límite se puede encontrar llamando a TerminalInfoInteger(TERMINAL_MAXBARS).

Además, la función Bars tiene una segunda opción que le permite averiguar el número de barras en el intervalo entre dos fechas.

int Bars(const string symbol, ENUM_TIMEFRAMES timeframe, datetime start, datetime stop)

Sólo se consultan aquellas barras cuya hora de apertura esté comprendida en el rango entre start y stop (ambos inclusive). No importa en qué orden se especifiquen start y stop: la función analizará las cotizaciones de un tiempo menor a uno mayor.

Si los datos de la serie temporal con los parámetros especificados aún no se han generado o sincronizado con el servidor de operaciones de trading en el momento en que se llama a la función Bars/iBars, la función devolverá null. En este caso, el atributo de error en _LastError también será 0 (no hay error porque, simplemente, los datos aún no se han descargado o no están listos). Después de recibir 0, compruebe la sincronización de un marco temporal específico utilizando SeriesInfoInteger(..., SERIES_SYNCHRONIZED) o la sincronización del símbolo mediante la función especial SymbolIsSynchronized.

En el script SeriesBars.mq5 de la siguiente sección se muestran ejemplos de cómo trabajar con las funciones, junto con la función iBarShift asociada.