M1: zero divide

 
   double MinL=0;
   double MaxH=0;


   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(int i=0; i<limit; i++)
     {
      MaxH=High[Highest(NULL,0,MODE_HIGH,period,i)];
      MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;
      Value=MathMin(MathMax(Value,-0.999),0.999);
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];

     }
Помогите пожалуйста, почему то на некоторых валютных парах на тф м1 вылезает такая ошибка, на некоторых нет. Указывает на строчку (выделена жирным).
 
Anton Sokolov:
Помогите пожалуйста, почему то на некоторых валютных парах на тф м1 вылезает такая ошибка, на некоторых нет. Указывает на строчку (выделена жирным).

Возможно "додж", попробуйте так.

Value = 0.33*2*((price-MinL)/((MaxH+Point)-MinL)-0.5) + 0.67*Value1;
 
Anton Sokolov:
Помогите пожалуйста, почему то на некоторых валютных парах на тф м1 вылезает такая ошибка, на некоторых нет. Указывает на строчку (выделена жирным).

Перед делением всегда надо проверять знаменатель на ноль

double MinL=0;
   double MaxH=0;


   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(int i=0; i<limit; i++)
     {
      MaxH=High[Highest(NULL,0,MODE_HIGH,period,i)];
      MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      
      double d=MaxH-MinL;
      
      if(d==0){
         Value=Value1;
      }
      else{
         Value = 0.33*2*((price-MinL)/d-0.5) + 0.67*Value1;
      }
      
      Value=MathMin(MathMax(Value,-0.999),0.999);
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];

     }
 
Vladimir Zubov:

Возможно "додж", попробуйте так.

Спасибо, помогло.
 
Vladimir Zubov:

Возможно "додж", попробуйте так.

Вы серьезно? Вы всегда и все делает так как попало?
 
Dmitry Fedoseev:
Вы серьезно? Вы всегда и все делает так как попало?
Всё зависит от необходимой степени точности, если погрешность на один пункт допустима то ничего в этом страшного нет. Хотя у вас конечно пример правильный.