- Символы и таймфреймы
- Технические особенности организации и хранения таймсерий
- Получение характеристик массивов котировок
- Количество доступных баров (Bars/iBars)
- Поиск индекса бара по времени (iBarShift)
- Обзор Copy-функций для получения массивов котировок
- Получение котировок в виде массива структур MqlRates
- Раздельный запрос массивов цен, объемов, спредов, времени
- Чтение цены, объема, спреда и времени по индексу бара
- Поиск максимального и минимального значения в таймсерии
- Работа с массивами реальных тиков в структурах MqlTick
Получение котировок в виде массива структур MqlRates
Для запроса массива котировок, включающего все характеристики баров, предназначена функция CopyRates, имеющая несколько перегрузок.
int CopyRates(const string symbol, ENUM_TIMEFRAMES timeframe, int offset, int count, MqlRates &rates[])
int CopyRates(const string symbol, ENUM_TIMEFRAMES timeframe, datetime start, int count, MqlRates &rates[])
int CopyRates(const string symbol, ENUM_TIMEFRAMES timeframe, datetime start, datetime stop, MqlRates &rates[])
Функция получает в массив rates исторические данные для указанных параметров: символа, таймфрейма и диапазона времени, заданного либо номерами баров, либо значениями start/stop типа datetime.
Функция возвращает количество скопированных элементов массива либо -1 в случае ошибки, код которой можно узнать из _LastError. В частности, ошибка возникнет, если задан несуществующий символ, интервал не содержит данных на сервере или выходит за ограничение по количеству баров на графике (TerminalInfoInteger(TERMINAL_MAXBARS)).
Принципы работы с данной функцией являются общими для всех Copy-функций и были изложены в разделе Обзор Copy-функций для получения массивов котировок.
Структура встроенного типа MqlRates описана следующим образом:
struct MqlRates
|
Попробуем применить функцию для подсчета среднего размера баров в скрипте SeriesStats.mq5. Во входных переменных предоставим возможность выбора рабочего символа, таймфрейма, количества анализируемых баров и начального смещения в прошлое (0 означает анализ с текущего бара).
input string WorkSymbol = NULL; // Symbol (leave empty for current)
|
Набросив скрипт на график EURUSD,H1, мы можем получить примерно следующий результат.
Requesting 100000 bars on EURUSD PERIOD_H1
|
Поскольку в терминале стояло ограничение на 20000 баров, запрос 100000 баров смог вернуть только 20018 (лимит и новые сформированные бары после начала сеанса). В самый первый элемент массива (с индексом 0) попал бар со временем 2018.07.19 15:00, а в последний — 2021.10.11 17:00.
Согласно статистике средний размах бара за это время составил 128 пунктов, и движение между открытием и закрытием — 62 пункта.
При запросе информации с помощью начальной и конечной даты (start/stop) имейте в виду, что обе границы трактуются включительно. Поэтому для задания интервала, соответствующего какому-либо бару старшего таймфрейма, следует отнимать от правой границы 1 секунду. Мы применим этот прием в примере SeriesSpread.mq5 в разделе Чтение цены, объема, спреда и времени по индексу бара.