Странная ошибка Array out of range - страница 3

 
Denis Glaz #:

она исчезает, потому что это единственное место, где идет попытка записи данных в массив. Если вы там вместо нее напишите строчку rhma[0] = 1; то тоже будет ошибка

в строке rhma[i] = (wma_1 * 2) - wma_2; есть запись в массив..

Я просто функцией ArraySize(rhma) проверяю размер.. =0 всегда если строка с iMAOnArray есть, а если убрать то всегда =3.. тоже самое если массив сделать динамический 

 
Nikolay Ivanov #:

в строке rhma[i] = (wma_1 * 2) - wma_2; есть запись в массив..

Я просто функцией ArraySize(rhma) проверяю размер.. =0 всегда если строка с iMAOnArray есть, а если убрать то всегда =3.. тоже самое если массив сделать динамический 

Да... Это супер странно

 
Конечный код выглядит так:

sub_recommend_enum tv_ma_15(int timeframe) //Hull MA 9
{
   sub_recommend_enum result = 0;
   
   double rhma[];
   ArrayResize(rhma, 4);
   
   double wma_1 = 0;
   double wma_2 = 0;
   
   int i = 0;
   while (i < 4)
   {
      wma_1 = iMA(Symbol(), timeframe, 5, 0, MODE_LWMA, PRICE_CLOSE, i);
      wma_2 = iMA(Symbol(), timeframe, 9, 0, MODE_LWMA, PRICE_CLOSE, i);
      rhma[i] = NormalizeDouble((wma_1 * 2) - wma_2, Digits);
      
      i++;
   }
   
   ArraySetAsSeries(rhma, true);
   double hma_0 = NormalizeDouble(iMAOnArray(rhma, 0, 3, 0, MODE_LWMA, 0), Digits);
   double hma_1 = NormalizeDouble(iMAOnArray(rhma, 0, 3, 0, MODE_LWMA, 1), Digits);
   Print("HMA0 = ", hma_0);
   Print("HMA1 = ", hma_1);
   
   if (hma_0 > hma_1)
      result = 1;
   else if (hma_0 < hma_1)
      result = -1;
   else
      result = 0;
   
   return result;
}
 
обойти то можно ошибку конечно.. но реально немного странно 
 
Вроде бы по всем правилам. Но то что присутствие документированной функции в теле функции вызывает отключение нормальной работы выделения памяти под массивы - это баг или фича?)
 

самый прикол в том, что у меня есть такая конструкция в старых кодах где локально объявленный в функции массив идет в iMAOnArray там же и все ок.. только что проверил все работает.

пока не пойму в чем отличие 

 
Denis Glaz #:
Вроде бы по всем правилам. Но то что присутствие документированной функции в теле функции вызывает отключение нормальной работы выделения памяти под массивы - это баг или фича?)
чекните ворнинги - может где-то ещё объявили массив с тем же именем
 

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

Короче я тупо написал в глобальной области 

int M=0;

хотя эта М нигде не используется.. и все запахало..

Почему все так - хз..

 
Aleksey Semenov #:
чекните ворнинги - может где-то ещё объявили массив с тем же именем

Пусто. Пол дня уже голову ломаю, думаю тут какая-то ошибка компилятора

 
Denis Glaz #:

Пусто. Пол дня уже голову ломаю, думаю тут какая-то ошибка компилятора

 проверьте 

Файлы:
nZZ2.mq4  3 kb
Причина обращения: