Количество доступных баров (Bars/iBars)

Более короткий способ узнать общее количество баров в таймсерии по символу/периоду предоставляют функции Bars и iBars (какую именно использовать — разницы нет, iBars добавлена для совместимости с MQL4).

int Bars(const string symbol, ENUM_TIMEFRAMES timeframe)        

int iBars(const string symbol, ENUM_TIMEFRAMES timeframe)        

Функции возвращают количество доступных для MQL-программы баров по заданным символу и периоду. На это значение оказывает влияние параметр Макс. баров в окне в Настройках терминала (см. врезку в разделе Технические особенности организации и хранения таймсерий). Например, если в терминал скачана история, которая при конкретном таймфрейме составляет 20000 баров, но в настройках установлен лимит 10000 баров, то именно вторая величина будет определяющей. Сразу после запуска терминала функции вернут количество 10000 баров, но по мере формирования новых баров оно будет увеличиваться (если позволяет свободная память). Из MQL5 данный лимит можно узнать посредством вызова TerminalInfoInteger(TERMINAL_MAXBARS).

Кроме того у функции Bars имеется второй вариант, позволяющий узнать количество баров в диапазоне между двумя датами.

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

При таком запросе учитываются только те бары, время открытия которых попадает в диапазон от start до stop (включительно). Причем не важно, в какой последовательности указаны start и stop: функция в любом случае просканирует фрагмент котировок от меньшего времени до большего.

Если данные для таймсерии с указанными параметрами еще не сформированы или не синхронизированы с торговым сервером при вызове функций Bars/iBars, они возвращают нулевое значение. При этом признак ошибки _LastError будет также равен 0 (нет ошибки, поскольку данные просто пока не скачаны или не готовы). Получив 0, проверяйте синхронизацию конкретного таймфрейма с помощью SeriesInfoInteger(..., SERIES_SYNCHRONIZED) или синхронизацию символа — для этого есть отдельная функция SymbolIsSynchronized.

Примеры работы с функциями будут показаны в скрипте SeriesBars.mq5, в следующем разделе, вместе со связанной функцией iBarShift.