- Направление индексации в массивах и таймсериях
- Организация доступа к данным
- 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
CopySeries
Получает в указанный набор массивов синхронизированные таймсерии из структуры MqlRates для указанного символа-периода в указанном количестве. Отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар.
При копировании заранее неизвестного количества данных рекомендуется в качестве приемных массивов использовать динамический массив, так как если данных оказывается больше, чем вмещает массив, то производится попытка перераспределения массива таким образом, чтобы запрошенные данные поместились целиком и полностью.
Если необходимо копировать заранее известное количество данных, то лучше это делать в статически выделенный буфер, чтобы избежать излишнего перевыделения памяти.
Неважно, какое свойство имеет приемный массив – as_series=true или as_series=false, данные будут скопированы таким образом, что самый старый по времени элемент таймсерии будет скопирован в начало физической памяти, отведенной под массив.
int CopySeries(
|
Параметры
symbol_name
[in] Символ.
timeframe
[in] Период.
start_pos
[in] Номер первого копируемого элемента.
count
[in] Количество копируемых элементов.
rates_mask
[in] Комбинация флагов из перечисления ENUM_COPY_RATES .
array1, array2,...
[out] Массив cоответствующего типа для получения таймсерии из структуры MqlRates. Порядок массивов, передаваемых в функцию, должен соответствовать порядку полей в структуре MqlRates.
Возвращаемое значение
Количество скопированных элементов массива либо -1 в случае ошибки.
Примечание
Если интервал запрашиваемых таймсерий полностью находится вне доступных данных на сервере, то функция возвращает -1. В случае если запрашиваемые данные находятся за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет -1.
При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
Разница между CopySeries и CopyRates
Функция CopySeries позволяет за один раз получать только нужные таймсерии в разные указанные массивы, при этом они все синхронизированы между собой. Это означает, что все значения в полученных массивах по конкретному индексу N будут принадлежать одному и тому же бару на указанной паре Символ/Таймрейм. В этом случае программисту не требуется заботиться о том, чтобы все полученные таймсерии были синхронизированы по времени открытия бара.
В отличие от CopyRates, которая возвращает полный набор таймсерий в виде массива MqlRates, функция CopySeries позволяет программисту получать только нужные таймсерии в виде отдельных массивов, для этого необходимо указать комбинацию флагов для указания типа запрашиваемых таймсерий. При этом порядок массивов передаваемых в функцию должен соответствовать порядку полей в структуре MqlRates:
struct MqlRates
|
Таким образом, если необходимо получить значения таймсерий time, close и real_volume для последних 100 баров текущего Символа/Таймфрема, то вызов должен быть следующим:
datetime time[];
|
При этом важен порядок массивов "time, close, volume" — он должен соответствовать порядку полей в структуре MqlRates. А вот порядок значений в маске rates_mask значения не имеет, маска могла быть такой :
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE |
Пример:
//--- input parameters
|
Смотри также