Descargar MetaTrader 5

Bars

Devuelve el número de barras del historial para el símbolo y período correspondientes. Existen 2 variantes de la función.

Solicitar el número de barras en el historial

int  Bars(
   string           symbol_name,     // nombre del símbolo
   ENUM_TIMEFRAMES  timeframe,       // período
   );

Solicitar el número de barras en el intervalo establecido

int  Bars(
   string           symbol_name,     // nombre del símbolo
   ENUM_TIMEFRAMES  timeframe,       // período
   datetime         start_time,      // fecha y hora de inicio
   datetime         stop_time        // fecha y hora de finalización
   );

Parámetros

symbol_name

[in]  Símbolo.

timeframe

[in]  Período.

start_time

[in]  Hora de la barra correspondiente al primer elemento.

stop_time

[in]  Hora de la barra correspondiente al último elemento.

Valor devuelto

Si los parámetros start_time y stop_time están especificados, la función devolverá el número de barras en el rango de fechas. Si estos parámetros no están especificados, la función devolverá el número total de barras.

Nota

Si en el momento cuando se llama a la función Bars(), los datos para la serie temporal con los parámetros especificados todavía no están formados en el terminal, o los datos de la serie temporal no están sincronizados con el servidor comercial a la hora de invocar la función, esta función devolverá el valor cero.

Al solicitar el número de barras en un diapasón de fechas establecido, solo se tienen en cuenta aquellas barras cuya hora de apertura entre en este diapasón. Por ejemplo, si el sábado es el actual día de la semana, entonces, al solicitar el número de barras semanales indicando start_time=último_martes y stop_time=último_viernes, la función retornará 0, dado que la hora de apertura en el marco temporal de una semana siempre cae en domingo, y ni una sola barra de semana entra en el diapasón indicado.

Ejemplo de solicitud del número de barras en la historia:

   int bars=Bars(_Symbol,_Period);
   if(bars>0)
     {
      Print("Cantidad de barras en el historial del terminal para el símbolo-período en este momento = ",bars);
     }
   else  //no hay barras disponibles
     {
      //--- por lo visto, datos por el símbolo no están sincronizados con los datos del servidor
      bool synchronized=false;
      //--- contador del ciclo
      int attempts=0;
      // hagamos 5 intentos de esperar la sincronización
      while(attempts<5)
        {
         if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED))
           {
            //--- sincronización con éxito, salimos
            synchronized=true;
            break;
           }
         //--- aumentamos el contador
         attempts++;
         //--- esperaremos 10 milisegundos hasta la siguiente iteración 
         Sleep(10);
        }
      //--- salimos del ciclo después de sincronización
      if(synchronized)
        {
         Print("Cantidad de barras en el historial del terminal para el símbolo-período en este momento = ",bars);
         Print("La primera fecha en el historial del terminal para el símbolo-período en este momento = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE));
         Print("La primera fecha en el historial del servidor para el símbolo = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE));
        }
      //--- no se ha conseguido la sincronización de datos
      else
        {
         Print("No se ha podido obtener la cantidad de barras para ",_Symbol);
        }
     }

Ejemplo de solicitud del número de barras en un intervalo establecido:

   int n;
   datetime date1 = D'2016.09.02 23:55'// viernes
   datetime date2 = D'2016.09.05 00:00'// lunes
   datetime date3 = D'2016.09.08 00:00'// jueves
   //---
   n=Bars(_Symbol,PERIOD_H1,D'2016.09.02 02:05',D'2016.09.02 10:55');
   Print("Número de barras: ",n); // Mostrará "Número de barras: 8", en el cálculo se tendrá en cuenta la barra de las 2, pero la de las 11 no se considerará
   n=Bars(_Symbol,PERIOD_D1,date1,date2);
   Print("Número de barras: ",n); // Mostrará "Número de barras: 1", puesto que en el diapasón ha entrado la hora de apertura solo de una barra de día, la del lunes
   n=Bars(_Symbol,PERIOD_W1,date2,date3);
   Print("Número de barras: ",n); // Mostrará "Número de barras: 0", puesto que en el diapsón establecido no entra la hora de apertura de ni una sola barra de semana

Véase también

Funciones de procesamiento de eventos