Получение характеристик массивов котировок

Перед чтением массивов таймсерий бывает полезно убедиться в их наличии и соответствии характеристик ожиданиям. Для получения основных свойств, таких как глубина доступной истории в терминале и на сервере, количество построенных баров по конкретному сочетанию символ/период и отсутствии разночтений в котировках между терминалом и сервером предназначена функция SeriesInfoInteger.

Функция имеет 2 формы: первая непосредственно возвращает запрошенное значение (типа long), а вторая использует для этого четвертый параметр result, передаваемый по ссылке. При этом вторая форма возвращает признак успеха (true) или ошибки (false). В любом случае код ошибки можно узнать с помощью функции GetLastError.

long SeriesInfoInteger(const string symbol, ENUM_TIMEFRAMES timeframe, ENUM_SERIES_INFO_INTEGER property)

bool SeriesInfoInteger(const string symbol, ENUM_TIMEFRAMES timeframe, ENUM_SERIES_INFO_INTEGER property, long &result)

Функция позволяет узнать одно из свойств временного ряда для указанного символа и таймфрейма, или в целом для всей истории по символу. Запрашиваемое свойство идентифицируется третьим аргументом типа ENUM_SERIES_INFO_INTEGER. Это перечисление включает все доступные свойства:

Идентификатор

Описание

Тип свойства

SERIES_BARS_COUNT

Количество баров по символу/периоду, см. Bars

long

SERIES_FIRSTDATE

Самая первая дата по символу/периоду

datetime

SERIES_LASTBAR_DATE

Время открытия последнего бара по символу/периоду

datetime

SERIES_SYNCHRONIZED

Признак синхронизированности данных по символу/периоду на терминале и на сервере

bool

SERIES_SERVER_FIRSTDATE

Самая первая дата в истории по символу на сервере независимо от периода

datetime

SERIES_TERMINAL_FIRSTDATE

Самая первая дата в истории по символу в клиентском терминале независимо от периода

datetime

В зависимости от сути свойства полученную величину следует приводить к значению конкретного типа (см. столбец Тип свойства).

Все свойства возвращаются по состоянию на текущий момент.

В скрипте SeriesInfo.mq5 приводится пример запроса всех свойств.

void OnStart()
{
   PRTF(SeriesInfoInteger(NULL0SERIES_BARS_COUNT));
   PRTF((datetime)SeriesInfoInteger(NULL0SERIES_FIRSTDATE));
   PRTF((datetime)SeriesInfoInteger(NULL0SERIES_LASTBAR_DATE));
   PRTF((bool)SeriesInfoInteger(NULL0SERIES_SYNCHRONIZED));
   PRTF((datetime)SeriesInfoInteger(NULL0SERIES_SERVER_FIRSTDATE));
   PRTF((datetime)SeriesInfoInteger(NULL0SERIES_TERMINAL_FIRSTDATE));
   PRTF(SeriesInfoInteger("ABRACADABRA"0SERIES_BARS_COUNT));
}

Вот пример результата, полученного на EURUSD, H1, на сервере MQ Demo:

SeriesInfoInteger(NULL,0,SERIES_BARS_COUNT)=10001 / ok
(datetime)SeriesInfoInteger(NULL,0,SERIES_FIRSTDATE)=2020.03.02 10:00:00 / ok
(datetime)SeriesInfoInteger(NULL,0,SERIES_LASTBAR_DATE)=2021.10.08 14:00:00 / ok
(bool)SeriesInfoInteger(NULL,0,SERIES_SYNCHRONIZED)=false / ok
(datetime)SeriesInfoInteger(NULL,0,SERIES_SERVER_FIRSTDATE)=1971.01.04 00:00:00 / ok
(datetime)SeriesInfoInteger(NULL,0,SERIES_TERMINAL_FIRSTDATE)=2016.06.01 00:00:00 / ok
SeriesInfoInteger(ABRACADABRA,0,SERIES_BARS_COUNT)=0 / MARKET_UNKNOWN_SYMBOL(4301)