CopyRates
Получает в матрицу или вектор исторические серии структуры MqlRates указанного символа-периода в указанном количестве. Отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар.
При этом данные будут скопированы таким образом, что самый старый по времени элемент помещается в начало матрицы/вектора. Существует 3 варианта метода.
Обращение по начальной позиции и количеству требуемых элементов
bool matrix::CopyRates(
|
Обращение по начальной дате и количеству требуемых элементов
bool matrix::CopyRates(
|
Обращение по начальной и конечной датам требуемого интервала времени
bool matrix::CopyRates(
|
Для вектора методы аналогичны.
Обращение по начальной позиции и количеству требуемых элементов
bool vector::CopyRates(
|
Обращение по начальной дате и количеству требуемых элементов
bool vector::CopyRates(
|
Обращение по начальной и конечной датам требуемого интервала времени
bool vector::CopyRates(
|
Параметры
symbol
[in] Символ.
period
[in] Период.
rates_mask
[in] Комбинация флагов из перечисления ENUM_COPY_RATES, указывающих тип запрашиваемых серий. При копировании в вектор можно указать только одно значение из перечисления ENUM_COPY_RATES, иначе будет ошибка.
start
[in] Номер первого копируемого элемента.
count
[in] Количество копируемых элементов.
from
[in] Время бара, соответствующее первому элементу.
to
[in] Время бара, соответствующее последнему элементу.
Возвращаемое значение
Возвращает true в случае успеха, иначе false в случае ошибки.
Примечание
Если интервал запрашиваемых данных полностью находится вне доступных данных на сервере, то функция возвращает false. В случае если запрашиваются данные за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет false.
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
При запросе данных по начальной дате и количеству требуемых элементов возвращаются только данные, дата которых меньше (раньше) или равна указанной. При этом интервал задается и учитывается с точностью до секунды. То есть дата открытия любого бара, для которого возвращается значение (объем, спред, цена Open, High, Low, Close или время открытия Time), всегда равна или меньше указанной.
При запросе данных в заданном диапазоне дат возвращаются только данные, попадающие в запрашиваемый интервал, при этом интервал задается и учитывается с точностью до секунды. То есть время открытия любого бара, для которого возвращается значение (объем, спред, значение в индикаторном буфере, цена Open, High, Low, Close или время открытия Time), всегда находится в запрошенном интервале.
Таким образом, если текущий день недели Суббота, то при попытке скопировать данные на недельном таймфрейме с указанием start_time=Последний_Вторник и stop_time=Последняя_Пятница функция вернет 0, так как время открытия на недельном таймфрейме всегда приходится на воскресенье, но ни один недельный бар не попадает в указанный диапазон.
Если необходимо получить значение, соответствующее текущему незавершенному бару, то можно использовать первую форму вызова с указанием start_pos=0 и count=1.
Перечисление ENUM_COPY_RATES содержит флаги для указания типа данных, которые необходимо передать в матрицу или массив. Комбинация флагов позволяет за один запрос получить несколько серий из истории. При этом порядок строк в матрице будет соответствовать порядку значений в перечислении ENUM_COPY_RATES — то есть строка с данными High будет в матрице всегда выше строки с данными Low.
Идентификатор |
Значение |
Описание |
---|---|---|
COPY_RATES_OPEN |
1 |
Серия цен Open |
COPY_RATES_HIGH |
2 |
Серия цен High |
COPY_RATES_LOW |
4 |
Серия цен Low |
COPY_RATES_CLOSE |
8 |
Серия цен Close |
COPY_RATES_TIME |
16 |
Серия Time (время открытия бара)
Получение времени во float вектора и матрицы (vectord и matrixf), приводит к потерям ~100 секунд, т.к. точность float сильно ограничена, и целые числа со значением более 1<<24 не могут быть точно представлены во float. |
COPY_RATES_VOLUME_TICK |
32 |
Тиковые объемы |
COPY_RATES_VOLUME_REAL |
64 |
Торговые объемы |
COPY_RATES_SPREAD |
128 |
Спреды |
Комбинация |
|
|
COPY_RATES_OHLC |
15 |
Серии Open, High, Low и Close |
COPY_RATES_OHLCT |
31 |
Серии Open, High, Low, Close и Time |
Расположение данных |
|
|
COPY_RATES_VERTICAL |
32768 |
Серии копируются в матрицу вдоль вертикальной оси. Это означает, что полученные значения серии в матрице расположены вертикально — то есть самые старые данные находятся в первой строке, а самые свежие в последней строке матрицы.
По умолчанию при копировании в матрицу серии добавляются вдоль горизонтальной оси.
Флаг имеет значение только при копировании в матрицу. |
Пример:
//+------------------------------------------------------------------+
|
Смотри также