О вызове пользовательского индикатора из эксперта

 
Всем привет! При попытке вызвать довольно тяжелый индикатор из эксперта начинаются странности. В связи с этим возник философский вопрос: срабатывает ли процедуры init() и deinit() индикатора при вызове его из эксперта? Подозреваю, что именно из-за этого сегодня уже 2 раза рухнул МТ, один раз с крешлогом, другой без. Была только системная диагностика о неправильном обращении к рантайм-библиотеке С++, после чего МТ закрылся без каких-либо последствий. Раньше, до написания этого эксперта, все билды МТ падали считанное число раз, можно пересчитать по пальцам одной руки.
 
подобную ошибку (возможно, эту самую) исправили в начале сентября. скачайте последний билд и попробуйте снова
 
Подскажите, в чем м.б. проблема?
Написан индикатор на основе ATR....рисуется все нормально.
Но при запуске эксперта на основе этого индикатора выдаются сообщения в логах деление на 0.
При выводе значений индикатора в файл.....пишется все нормально, кроме последних двух недель истории.
 
код эксперта и индикатора + описание ошибки (уже есть) = решение вопроса ;)
 
Вот оно :) называется адаптивный ренко, т.е. на основе ATR
int start()
  {
   int    i,counted_bars=IndicatorCounted();
   double Brick=0,DN=0,UP=0,BricksUp=0,BricksDn=0,Value1=0;
   
//---- 
   if (Bars<=Smooth) return(0);
   i=Bars-Smooth-1; 
   if(counted_bars>=Smooth) i=Bars-counted_bars-1;
//---- 
   while(i>=0)
   {
      if(i==Bars-Smooth-1)  // Первый бар
         {
            UP=High[i];
            DN=Low[i];
            Brick=Stap*(High[i]-Low[i]);
         }
      else
         {
           if (Close[i]>UP+Brick)
             {
               BricksUp=MathFloor((Close[i]-UP)/Brick)*Brick;
               UP=UP+BricksUp;
               Value1=iATR(NULL,0,Smooth,i); 
               Brick=Stap*Value1;
               DN=UP-Brick;
               BricksDn=0;
             }  
           if (Close[i]<DN-Brick)
             {   
               BricksDn=MathFloor((DN-Close[i])/Brick)*Brick;  
               DN=DN-BricksDn;
               Value1=iATR(NULL,0,Smooth,i); 
               Brick=Stap*Value1;       
               UP=DN+Brick;
               BricksUp=0;
             }
         } 
      ExtMapBuffer1[i]=UP;
      ExtMapBuffer2[i]=DN;
      i--;
   }
//----
   return(0);
  }



в эксерте использую такой вызов

   renco_current_up=iCustom(NULL, 0, "Renko",1,10,0,0);
   renco_previos_up=iCustom(NULL, 0, "Renko",1,10,0,1);
 
При модели Опен Прайс (как я писал или хотел написать на Альпари), у тебя brick (кирпич) получится нулевой, при Контрол Пойнт на первом смоделированном тике та же самая ситуация будет. Поэтому, не используй в кастомном вызлве нулевок смещение.
 
При модели Опен Прайс (как я писал или хотел написать на Альпари), у тебя brick (кирпич) получится нулевой, при Контрол Пойнт на первом смоделированном тике та же самая ситуация будет. Поэтому, не используй в кастомном вызлве нулевок смещение.

Не очень понял....поподробней пожалуйста.
 
Вставь вывод в лог
Brick=Stap*(High[i]-Low[i]);
 
хорошо....
А как это обойти?
 
Не пользуй индикатор в нулевом баре.
 
Не пользуй индикатор в нулевом баре.

Т.е. я не могу знать значение индикатора в текущий момент?

значит надо так писать? но в логе все равно фигурирует деление на 0.
iCustom(NULL, 0, "Renko",1,10,0,1)
Причина обращения: