iMAOnArray работает неверно ?

 

Привожу пример где iMAOnArray работает неправильно.

Параметрах индикатора можно переключать между iMAOnArray и функцией LWMA, которая считает машку по массиву правильно.

double utils.iMAOnArray(double &buffer[], int period, int shift) {
   //if(shift > 200 ) {
   //   return(0);
   //}
   if(isMaOnArray){
      double value = iMAOnArray(buffer, 0, period, 0, maType, Bars - 1 - shift);
   } else {
      value = LWMA(buffer, period, Bars - 1-shift);
   }
   return(value);
}
Файлы:
test_1.mq4  3 kb
 
TheXpert:
поиск рулит.

Не нашел обсуждения такой темы, похоже в функции явная ошибка.
 
excelf:
Не нашел обсуждения такой темы, похоже в функции явная ошибка.

Редко, но всплывает. Вот например.

Или загуглите <iMAOnArray неправильно site:mql4.com>

 
Спасибо, остается пожалеть, что бы разработки обратили внимание на эту проблему и исправили.
 
Возможно проблема шире и глубже чем мы ее видим. Я вот уже давно iMAOnArray использую с большой осторожностью.
 

По теме ответ разработчиков:

Rosh:

Объяснение такое: все встроенные индикаторы, которые рассчитываются на массивах (iBandsOnArray, iCCIOnArray, iEnvelopesOnArray, iMomentumOnArray, iMAOnArray, iRSIOnArray, iStdDevOnArray), написаны со своей встроенной оптимизацией, которая экономно рассчитывает последние 1-2 бара. При этом алгоритм расчета в какой-то мере опирается на значение количества неизмененных баров с момента последнего пришедшего тика (вспомните IndicatorCounted). Такой механизм экономного расчета удовлетворяет в 99% случаев. Меняться это не будет, если Ваш случай не подходит под данный механизм расчета, Вы можете написать собственную функцию, что собственно Вы и сделали.
Причина обращения: