Обьявление в теле функции.

 
Подскажите, уважаемые.
Вот код.
int start()
 {
  double Z,Z1,Z2,Z3,Z4,Z5,Z6;
  int shift1,shift2,shift3,shift4,shift5,shift6;
  
   if(isNewHighOrLow(Z4,Z5))
   {
    if(!Real)
    {
     for(shift6=Bars-1;shift6>=0;shift6--)
     {
      if(Indicator==0)
          Z6=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,
                     ExtBackstep,0,shift6);
      if(Indicator==1)
          Z6=iCustom(NULL,0,"DT_ZZ",ExtDepth,0,shift6);
      if(Indicator==2)
          Z6=iCustom(NULL,0,"CzigZag",ExtDepth,ExtDeviation,0,shift6);
      if(Indicator==3)
          Z6=iCustom(NULL,0,"Swing_ZZ",minBars,0,shift6);
      if(Indicator==4)
          Z6=iCustom(NULL,0,"ZigZag_new_nen3",ExtDepth,ExtDeviation,
                     ExtBackstep,0,shift6);
 
      if(Z6 != 0)
      {
       Z1=Z2;Z2=Z3;Z3=Z4;Z4=Z5;Z5=Z6;shift1=shift2;shift2=shift3;
       shift3=shift4;shift4=shift5;shift5=shift6;
       if(( Z4<Z2 && Z4>Z1 && Z1>Z3 && Z5<Z3)||(Z4>Z2 && Z4<Z1 && 
          Z1<Z3 && Z5>Z3))
       {
        WW(Z1,Z2,Z3,Z4,Z5,shift1,shift2,shift3,shift4,shift5);
       }
      }
     }
    }
    if(Real)
    {  
     for(shift6=Bars-1;shift6>=0;shift6--)
     {
      if(Indicator==0)
          Z6=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,
                     0,shift6);
      if(Indicator==1)
          Z6=iCustom(NULL,0,"DT_ZZ",ExtDepth,0,shift6);
      if(Indicator==2)
          Z6=iCustom(NULL,0,"CzigZag",ExtDepth,ExtDeviation,0,shift6);
      if(Indicator==3)Z6=iCustom(NULL,0,"Swing_ZZ",minBars,0,shift6);
      if(Indicator==4)
          Z6=iCustom(NULL,0,"ZigZag_new_nen3",ExtDepth,ExtDeviation,
                     ExtBackstep,0,shift6);
      
      if(Z6 != 0)
      {
       Z1=Z2;Z2=Z3;Z3=Z4;Z4=Z5;Z5=Z6;shift1=shift2;shift2=shift3;
       shift3=shift4;shift4=shift5;shift5=shift6;
      }
     }
     if((Z4<Z2 && Z4>Z1 && Z1>Z3) || (Z5<Z3 && Z5>Z2 && Z2>Z4) || 
        (Z4>Z2 && Z4<Z1 && Z1<Z3) || (Z5>Z3 && Z5<Z2 && Z2<Z4))
     WW(Z1,Z2,Z3,Z4,Z5,shift1,shift2,shift3,shift4,shift5);
    }
   }
   Print("Start",": Z4=",Z4,", Z5=",Z5);
   return(0);
 }
 
/*-------------------------------------------------------------+
|  Функция возвращает true и позволяет выполниться всему коду, |
|  если появиться новый max.выше т.5 или min. ниже т.5 , иначе |
|  false. При запуске индикатора она также возвращает true     |
|    Параметры:                                                |
|              Z4 - цена в т.4                                 |
|              Z5 - цена в т.5                                 |
+-------------------------------------------------------------*/
 bool isNewHighOrLow(double Z4, double Z5)
 {
  bool res=false;
  if(Z5==Z4)res=true;
  if(Z5<Z4 && Z5>Bid)res=true;
  if(Z5>Z4 && Z5<Bid)res=true;
  Print("Z4=",Z4,"; Z5=",Z5,"; Bid=",Bid);
  return(res);
 }
Функция isNewHighOrLow, если возвращает True,то позволяет выполниться всему коду. При первом запуске значения переменных Z4,Z5 инициализируются 0 и if(Z5==Z4)res=true; Функция выполняется и переменным присваиваются новые значения, что показывает мне Print в самом конце функции Start. При появлении нового тика в isNewHighOrLow передаются Z4,Z5 снова равные 0, что показывает Print в теле функции. Где я сделал что-то не так? Подскажите.
 

Объявление Z4 и Z5 в теле функции start() приводит к их обнулению с приходом каждого нового тика. Сделайте их статическими. И уже не раз писалось, что не стоит пытаться проверять две переменных double на равенство.

 

Спасибо. Все исправил.