Скачать MetaTrader 5

CopyLow

Функция получает в массив low_array исторические данные минимальных цен баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар.

CopyLow

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

Если необходимо копировать заранее известное количество данных, то лучше это делать в статически выделенный буфер, чтобы избежать излишнего перевыделения памяти.

Неважно, какое свойство имеет приемный массив - as_series=true или as_series=false, данные будут скопированы таким образом, что самый старый по времени элемент будет в начале физической памяти, отведенной под массив. Существует 3 варианта функции.

Обращение по начальной позиции и количеству требуемых элементов

int  CopyLow(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   int              start_pos,       // откуда начнем 
   int              count,           // сколько копируем
   double           low_array[]      // массив для копирования минимальных цен
   );

Обращение по начальной дате и количеству требуемых элементов

int  CopyLow(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   int              count,           // сколько копируем
   double           low_array[]      // массив для копирования минимальных цен
   );

Обращение по начальной и конечной датам требуемого интервала времени

int  CopyLow(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time,       // по какую дату
   double           low_array[]      // массив для копирования минимальных цен
   );

Параметры

symbol_name

[in]  Символ.

timeframe

[in]  Период.

start_pos

[in]  Номер первого копируемого элемента.

count

[in]  Количество копируемых элементов.

start_time

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

stop_time

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

low_array[]

[out]  Массив типа double.

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

Количество скопированных элементов массива либо -1 в случае ошибки.

Примечание

Если интервал запрашиваемых данных полностью находится вне доступных данных на сервере, то функция возвращает -1. В случае если запрашиваются данные за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет -1.

При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.

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

При запросе данных по начальной дате и количеству требуемых элементов возвращаются только данные, дата которых меньше (раньше) или равна указанной. При этом интервал задается и учитывается с точностью до секунды. То есть дата открытия любого бара, для которого возвращается значение (объем, спред, значение в индикаторном буфере, цена Open, High, Low, Close или время открытия Time), всегда равна или меньше указанной.

При запросе данных в заданном диапазоне дат возвращаются только данные, попадающие в запрашиваемый интервал, при этом интервал задается и учитывается с точностью до секунды. То есть время открытия любого бара, для которого возвращается значение (объем, спред, значение в индикаторном буфере, цена Open, High, Low, Close или время открытия Time), всегда находится в запрошенном интервале.

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

Если необходимо получить значение, соответствующее текущему незавершенному бару, то можно использовать первую форму вызова с указанием start_pos=0 и count=1.

Пример запроса исторических данных смотрите в разделе Способы привязки объектов. В приведенном там скрипте показано, как получать значения индикатора iFractals на последних 1000 барах и как потом вывести  на график по десять последних фракталов вверх и вниз. Подобный прием можно использовать для всех индикаторов, которые имеют пропуски значений и обычно реализуются с помощью следующих стилей построения:

Смотри также

CopyHigh


Обновлено: 2015.12.03