Bars

Возвращает количество баров в истории по соответствующему символу периоду. Существует 2 варианта функции.

Запросить количество всех баров в истории

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe        // периоду
   );

Запросить количество баров на заданном интервале

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );

Параметры

symbol_name

[in]  Символ.

timeframe

[in]  Период.

start_time

[in]  Время бара, соответствующее первому элементу.

stop_time

[in]  Время бара, соответствующее последнему элементу.

Возвращаемое значение

Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров.

Примечание

Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не синхронизированы с торговым сервером, то функция вернет нулевое значение.

При запросе количества баров в заданном диапазоне дат учитываются только те бары, чье время открытия попадает в этот диапазон. Например, если текущий день недели — суббота, то при запросе количества недельных баров с указанием start_time=последний_вторник и stop_time=последняя_пятница функция вернет 0, так как время открытия на недельном таймфрейме всегда приходится на воскресенье, и ни один недельный бар не попадает в указанный диапазон.

Пример запроса количества всех баров в истории:

   int bars=Bars(_Symbol,_Period);
   if(bars>0)
     {
      Print("Количество баров в истории терминала по символу-периоду на данный момент = ",bars);
     }
   else  //нет доступных баров
     {
      //--- видимо, данные по символу не синхронизированы с данными на сервере
      bool synchronized=false;
      //--- счетчик цикла
      int attempts=0;
      // сделаем 5 попыток дождаться синхронизации
      while(attempts<5)
        {
         if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED))
           {
            //--- есть синхронизация, выходим
            synchronized=true;
            break;
           }
         //--- увеличим счетчик
         attempts++;
         //--- подождем 10 миллисекунд до следующей итерации
         Sleep(10);
        }
      //--- вышли из цикла по факту синхронизации
      if(synchronized)
        {
         Print("Количество баров в истории терминала по символу-периоду на данный момент = ",bars);
         Print("Самая первая в истории терминала дата по символу-периоду на данный момент = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE));
         Print("Самая первая дата в истории по символу на сервере = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE));
        }
      //--- синхронизация данных так и не была достигнута
      else
        {
         Print("Не удалось получить количество баров на ",_Symbol);
        }
     }

Пример запроса количества баров в заданном интервале:

   int n;
   datetime date1 = D'2016.09.02 23:55'// пятница
   datetime date2 = D'2016.09.05 00:00'// понедельник
   datetime date3 = D'2016.09.08 00:00'// четверг
   //---
   n=Bars(_Symbol,PERIOD_H1,D'2016.09.02 02:05',D'2016.09.02 10:55');
   Print("Количество баров: ",n); // Выведет "Количество баров: 8", в подсчете будет учтен двухчасовой бар, а одиннадцатичасовой - не будет
   n=Bars(_Symbol,PERIOD_D1,date1,date2);
   Print("Количество баров: ",n); // Выведет "Количество баров: 1", поскольку в диапазон попало время открытия только одного дневного бара — за понедельник
   n=Bars(_Symbol,PERIOD_W1,date2,date3);
   Print("Количество баров: ",n); // Выведет "Количество баров: 0", поскольку в заданный диапазон не попадает время открытия ни одного недельного бара

Смотри также

Функции обработки событий