Неправильный расчет индикатора из примерав МТ4

 
Уважаемые разработчики!

Индикатор Parabolic, который приведен в примерах расчета индикаторов в стандартной поставке МТ4 на реале или на тесте сбивается и неправильно считает как только бары начинают двигаться. Это хорошо видно на визуализации.

С ув. Aлександр Ник.Гр.
 
Да, есть такое дело.



Желтые точки - встроенный параболик, магента - пользовательский. Надо будет проверить.
 
оказывается, эта ошибка уже исправлена, просто не входит в стандартгную поставку. Вы можете скачать привальный вариант из Code Base - "MQL4: Параболическая Система SAR, Parabolic SAR"
 
Спасибо за ответ. Я попробовал сделать свой вариант и у меня получилось с об'емом кода где-то в три раза меньше, но это я думаю не очень принципиально.
 
На всякий случай, может пригодится привожу код своего варианта.

//--------------------------------
extern double hrZD=100;
extern double hrmax=10;
extern int i0=0;
extern bool SPR=false;
//--------------------
double zah[],zal[],zas[];
double H,L,zh,zl,spr,ki,kii,ci,kimax;
int ti,fs,nn;
//********************************************************
int init()
{
   SetIndexBuffer(0,zah);
   SetIndexBuffer(1,zal);
   SetIndexBuffer(2,zas);
   return(0);
}
//********************************************************
int start() 
{
   int cbi,IC=Bars-IndicatorCounted()-1;
   if (IC==1 || IC==0) cbi=IC; else 
   {
      if (IC<0) return(0);
      if (SPR) spr=MarketInfo(Symbol(),MODE_SPREAD)*Point; else spr=0.0;
      cbi=Bars-2-i0; 
      ki=2.0/(hrZD*60.0/Period()); kii=ki; 
      kimax=2.0/(hrmax*60.0/Period()); 
      zh=High[cbi+i0]+spr; zah[cbi+1]=zh; 
      zl=Low[cbi+i0];      zal[cbi+1]=zl; 
      nn=0;
      ti=Time[cbi];
   }
   //------------------------------------------------------------------------------------------------------------------------------
   for(int i=cbi; i>=0; i--) 
   { 
      
      if (ti!=Time[i]) {nn=0; ti=Time[i];}
      H=High[i+i0]+spr; L=Low[i+i0];
      //----------------------------------------------------------------------------
      if (fs==1 && nn==0) {zl=zal[i+1]+(zh-zal[i+1])*kii; if (nn==0 && H>zah[i+1] && kii+ki<=kimax) {kii+=ki; nn=1;}}
      if (fs==2 && nn==0) {zh=zah[i+1]+(zl-zah[i+1])*kii; if (nn==0 && L<zal[i+1] && kii+ki<=kimax) {kii+=ki; nn=1;}}
      
      if (fs==1)
      {
         ci=Low[i+1+i0]; if (zl>ci) zl=ci;
         ci=Low[i+2+i0]; if (zl>ci) zl=ci;
      }
      if (fs==2)
      {
         ci=High[i+1+i0]+spr; if (zh<ci) zh=ci; 
         ci=High[i+2+i0]+spr; if (zh<ci) zh=ci;
      }
      
      if (H>zh) {zh=H; if (fs==2) {zl=zal[i+1]; kii=ki; nn=1;} fs=1;}
      if (L<zl) {zl=L; if (fs==1) {zh=zah[i+1]; kii=ki; nn=1;} fs=2;}
      //--------------------------------------------------------------
      zah[i]=zh;
      zal[i]=zl;
      zas[i]=(zh+zl)/2;
      //----------------------------------------------------
   }  
   //------------------------------------------------------
   return(0);
}
//********************************************************