MQL4 - automated forex trading   /  

Документация

Справочник MQL4  Операции с массивами  ArrayCopySeries

 
Используй возможности
MQL5 в MetaTrader 5
Learn possibilities of the new MQL5
Интересуешься новым?
Доступна справка по MQL5
int ArrayCopySeries( void array[], int series_index, string symbol=NULL, int timeframe=0)
Копирует массив-таймсерию в пользовательский массив и возвращает количество скопированных элементов.

Реального распределения памяти под массив данных и копирования не происходит. При обращении к такому массиву производится перенаправление доступа. Исключение составляют массивы, назначенные в качестве индексных в пользовательских индикаторах. В этом случае производится реальное копирование данных.

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

Замечание: если series_index - MODE_TIME, то передаваемый в функцию массив должен иметь тип datetime[].
Параметры:
array[]   -   Ссылка на одномерный числовой массив.
series_index   -   Идентификатор массива-таймсерии. Должен быть одним из перечисленных идентификаторов таймсерий.
symbol   -   Наименование инструмента (символ валютной пары).
timeframe   -   Период графика (таймфрейм). Может быть любым значением из перечисленных периодов.
Пример:
datetime daytimes[];
int      shift=10,dayshift,error;
//---- массив Time[] отсортирован в порядке убывания
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
error=GetLastError();
if(error==4066)
  {
   //---- делаем еще 2 попытки чтения
   for(int i=0;i<2; i++)
     {
      Sleep(5000);
      ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
      //---- проверим время текущего дневного бара
      datetime last_day=daytimes[0];
      if(Year()==TimeYear(last_day) && Month()==TimeMonth(last_day) && Day()==TimeDay(last_day)) break;
     }
  }
if(Time[shift]>=daytimes[0]) dayshift=0;
else
  {
   dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);
   if(Period()<PERIOD_D1) dayshift++;
  }
Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ", TimeToStr(daytimes[dayshift]));