- Направление индексации в массивах и таймсериях
- Организация доступа к данным
- SeriesInfoInteger
- Bars
- BarsCalculated
- IndicatorCreate
- IndicatorParameters
- IndicatorRelease
- CopyBuffer
- CopyRates
- CopySeries
- CopyTime
- CopyOpen
- CopyHigh
- CopyLow
- CopyClose
- CopyTickVolume
- CopyRealVolume
- CopySpread
- CopyTicks
- CopyTicksRange
- iBars
- iBarShift
- iClose
- iHigh
- iHighest
- iLow
- iLowest
- iOpen
- iTime
- iTickVolume
- iRealVolume
- iVolume
- iSpread
CopyHigh
Функция получает в массив high_array исторические данные максимальных цен баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар.
При копировании заранее неизвестного количества данных рекомендуется в качестве приемного массива использовать динамический массив, так как если данных оказывается меньше (или больше), чем вмещает массив, то производится попытка перераспределения массива таким образом, чтобы запрошенные данные поместились целиком и полностью.
Если необходимо копировать заранее известное количество данных, то лучше это делать в статически выделенный буфер, чтобы избежать излишнего перевыделения памяти.
Неважно, какое свойство имеет приемный массив - as_series=true или as_series=false, данные будут скопированы таким образом, что самый старый по времени элемент будет в начале физической памяти, отведенной под массив. Существует 3 варианта функции.
Обращение по начальной позиции и количеству требуемых элементов
int CopyHigh(
|
Обращение по начальной дате и количеству требуемых элементов
int CopyHigh(
|
Обращение по начальной и конечной датам требуемого интервала времени
int CopyHigh(
|
Параметры
symbol_name
[in] Символ.
timeframe
[in] Период.
start_pos
[in] Номер первого копируемого элемента.
count
[in] Количество копируемых элементов.
start_time
[in] Время бара, соответствующее первому элементу.
stop_time
[in] Время бара, соответствующее последнему элементу.
high_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.
Пример:
#property copyright "2009, MetaQuotes Software Corp."
|
Более полный пример запроса исторических данных смотрите в разделе Способы привязки объектов. В приведенном там скрипте показано, как получать значения индикатора iFractals на последних 1000 барах и как потом вывести на график по десять последних фракталов вверх и вниз. Подобный прием можно использовать для всех индикаторов, которые имеют пропуски значений и обычно реализуются с помощью следующих стилей построения: