Скачать MetaTrader 5

M1: zero divide

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Anton Sokolov
1071
Anton Sokolov  
   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 вылезает такая ошибка, на некоторых нет. Указывает на строчку (выделена жирным).
Vladimir Zubov
4572
Vladimir Zubov  
Anton Sokolov:
Помогите пожалуйста, почему то на некоторых валютных парах на тф м1 вылезает такая ошибка, на некоторых нет. Указывает на строчку (выделена жирным).

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

Value = 0.33*2*((price-MinL)/((MaxH+Point)-MinL)-0.5) + 0.67*Value1;
Dmitry Fedoseev
43861
Dmitry Fedoseev  
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];

     }
Anton Sokolov
1071
Anton Sokolov  
Vladimir Zubov:

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

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

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

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