Рабочий ZigZag

 
Люди, выложите кто нибудь нормальный рабочий ZZ!!! Чтобы во сех 3-х его буферах были значения. Все варианты перепробовал но HighMapBuffer и LowMapBuffer постоянно в нулях......
 
Смотрите код ЗЗ, там все ответы.
 
в нормальном зигзаге есть только 1 буфер, и там все значения нулевые за исключением контрольных точек.
 

Я видел ZZ в котором отдельно содержаться вершины и впадины:

https://c.mql4.com/forum/2009/11/ccbbugesqp.JPG

Т.е.

Буфер 1 - значение вершины

Буфер 2 - впадины

 
какой смысл переписывать индикатор, если все значения подряд можно получить обычным циклом?
 
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
 
 
//в функции
int n;
int Zbar[4]; //массив номеров баров с перегибом
double Zval[4]; //массив значений зигзага в точке перегиба Zval[1] - в точке 1 и тд. 
 
for(int i=0;i<Bars;i++){
    double zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
      if(zz!=0 && zz!=EMPTY_VALUE){
         Zbar[n]=i;
         Zval[n]=zz;
         n++;
            if(n>=4)break;
      }
}
получаем 4 точки ZZ, первая - еще не закрепленная
 

Они и должны быть в нулях (empty), за исключением баров вершин.
Тебе чего нужно, канал от вершин построить, что-то типа этого?

В базе много ЗЗ есть, в т.ч. уже и с каналом.

 

Мне нужно вынуть из ЗЗ значения вершинок и низов и запихать их в два разных массива, но чтоб индексация внутри массивов шла по порядку (1,2,3,4.....n).

Задача в том, чтобы соединять конкретные вершины с вершинами или низы с низами.

Сделал вот так, но рисуется не правильно....

for(int i=limit; i>= 0; i--)
      {
       ZZ[i] = NormalizeDouble(iCustom(Symbol(),0,"ZigZag",0,i),4);
       if (ZZ[i+1]>ZZ[i+2] && ZZ[i+1]>ZZ[i])
         {
          uZZ[u] = ZZ[i+1];
          u++;
         }
         
       if (ZZ[i+1]<ZZ[i+2] && ZZ[i+1]<ZZ[i])
         {
          dZZ[d] = ZZ[i+1];
          d++;
         }
      }
 
   while(i>0)
   {
      if (iCustom(NULL,TF2,"ZigZag",ExtDepth2,ExtDeviation2,ExtBackstep2,0,i)>0)
      {
         if (MathAbs(iCustom(NULL,TF2,"ZigZag",ExtDepth2,ExtDeviation2,ExtBackstep2,0,i)-iHigh(NULL,TF2,i))==0)
         {
            double h=High[iBarShift(NULL,TF1,iTime(NULL,TF2,i),false)];
            int hi=iBarShift(NULL,TF1,iTime(NULL,TF2,i),false);
            for(k=hi;k>iBarShift(NULL,TF1,iTime(NULL,TF2,i-1),false);k--)
            {
               if (h<High[k])
               {
                  h=High[k];
                  hi=k;
               }
            }
            ExtMapBuffer1[hi]=h;
         }
         if (MathAbs(iCustom(NULL,TF2,"ZigZag",ExtDepth2,ExtDeviation2,ExtBackstep2,0,i)-iLow(NULL,TF2,i))==0)
         {
            double l=Low[iBarShift(NULL,TF1,iTime(NULL,TF2,i),false)];
            int li=iBarShift(NULL,TF1,iTime(NULL,TF2,i),false);
            for(k=li;k>iBarShift(NULL,TF1,iTime(NULL,TF2,i-1),false);k--)
            {
               if (l>Low[k])
               {
                  l=Low[k];
                  li=k;
               }
            }
            ExtMapBuffer2[li]=l;
         }
      }
      i--;
   }
тут перетаскивается ЗЗ со старшего ТФ, но принцип тот же
 

Спасибо! Хотя бы про ЗЗ понятней стало))
Причина обращения: