Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MQL5 Cloud Network это сеть распределенных вычислений. Оцени сам!
Anton Sokolov
1071
Anton Sokolov 2016.04.08 15:22 
   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
4167
Vladimir Zubov 2016.04.08 15:31  
Anton Sokolov:
Помогите пожалуйста, почему то на некоторых валютных парах на тф м1 вылезает такая ошибка, на некоторых нет. Указывает на строчку (выделена жирным).

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

Value = 0.33*2*((price-MinL)/((MaxH+Point)-MinL)-0.5) + 0.67*Value1;
Dmitry Fedoseev
42648
Dmitry Fedoseev 2016.04.08 16:03  
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 2016.04.08 16:24  
Vladimir Zubov:

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

Спасибо, помогло.
Dmitry Fedoseev
42648
Dmitry Fedoseev 2016.04.08 16:36  
Vladimir Zubov:

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

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