Ошибка в функции ArrayMinimum()

 

Вот такой код:

  int time[3];
  time[0]=TimeCurrent()-1;
  time[1]=TimeCurrent()-2;
  time[2]=TimeCurrent()-3;
  Print(ArrayMinimum(time));

Получаем -1.

Видимо функция некорректно работает с большими числами. Причём неважно какой тип массива указывается, можно указать datetime, но получим то же самое. А вот если одному из элементов присвоить какое-нибудь маленькое значение, либо вообще не присваивать (оставить его нулевым), то функция отработает нормально и вернёт индекс этого элемента.

Кстати ArrayMaximum() в аналогичной ситуации ведёт себя нормально

 

Вы передаете integer массив вместо double. Формат функции:

int ArrayMinimum(double array[], int count=WHOLE_ARRAY, int start=0)

Поставьте double time[3]; и все заработает.
 

Дело в том, что в MQL4 нет типа данных unsigned int, а текущее значение количества секунд, прошедших с 1 января 1970 года уже превысило максимальное значение для целого числа со знаком. То есть, для функции ArrayMinimum в Вашем случае был приготовлен массив из не очень больших отрицательных чисел. Поэтому сравнение производится некорректно.

 
int start()
  {
//----
   datetime x=TimeCurrent();
   int c=x;   
   Alert((x==c));
//----
   return(0);
  }
 
В переменные int входит время до 2038.01.19 03:14 включительно
 
Meat, мы исправим такое поведение функции ArrayMinimum. Спасибо за замечание.
 
stringo писал (а) >>
...мы исправим такое поведение функции ArrayMinimum.
Такой ответ намного лучше :-)
 
Странно...
Причина обращения: