Ошибка #4002 при вызове индикатора из советника, если индикатор использует другой индикатор

 
Есть некоторый индикатор VOLAT, который в своих расчетах использует стандартный технический индикатор скользящей средней iMA(). Все казалось бы хорошо, хэндл вспомогательного индикатора iMA() создается успешно, индикатор VOLAT накидывается на график, в общем, работает так как надо. Вот соответствующий код внутри индикатора VOLAT, который отвечает за создание вспомогательного индикатора iMA()


// Возвращает хэндл индикатора MA. Всего один буфер.
   handle_MA=iMA(_Symbol, PERIOD_CURRENT, VOLAT_MA_PERIOD, VOLAT_MA_SHIFT, VOLAT_MA_METHOD, VOLAT_MA_PRICE);

// если не удалось создать хэндл
   if (handle_MA==INVALID_HANDLE) { // сообщим о неудаче и выведем номер ошибки
      PrintFormat("Не удалось создать хэндл индикатора iMA() для пары %s/%s, код ошибки %d", _Symbol, EnumToString(PERIOD_CURRENT), GetLastError());
      return(INIT_FAILED); // работа индикатора завершается досрочно
   }


Но вот проблема, не получается обратиться к индикатору VOLAT из эксперта.
Как только советник выполняет инициализацию основного индикатора VOLAT, то в журнал выводится о проблеме при создании вспомогательного индикатора iMA() :

"Не удалось создать хэндл индикатора iMA() для пары ..., код ошибки 4002"

ERR_WRONG_INTERNAL_PARAMETER

4002

Ошибочный параметр при внутреннем вызове функции клиентского терминала


и работа индикатора и эксперта завершается досрочно.

Прошу уважаемое сообщество подсказать, чем вызвана эта ошибка...


 
Необходимо добавить, что вызов индикатора VOLAT из советника происходит не через функцию iCustom(), а через создание объекта класса CiVolat.

   CiVolat* Volat; // создать динамический объект "индикатор VOLAT" 
 

Распечатайте параметры iMA. Может они действительно ошибочные?

Период усреднения VOLAT_MA_PERIOD не может быть <=0

Метод VOLAT_MA_METHOD должен быть в диапазоне от 0 до 3

VOLAT_MA_PRICE не может быть меньше 0

 
Slawa:Распечатайте параметры iMA. Может они действительно ошибочные?
да, спасибо, начал копать в этом направлении, разбираться с параметрами и ошибка нашлась в коде класса CiVolat

//+------------------------------------------------------------------+
//| Класс CiVolat
//| Назначение: класс индикатора "VOLAT"
//| Выводится из класса CIndicator
//+------------------------------------------------------------------+
class CiVolat : public CIndicator
  {
protected:

               ...
   }
Написание объектно-ориентированной обертки вокруг индикатора (разработка класса) - работа во многом чисто техническая, а значит скучная, вот ошибки и случаются...
Причина обращения: