вершины ZZ через iCustom

 

Код должен показать расстояние(количество баров) между двумя соседними вершинами, не работает даже принт в конце не отрабатывает.


extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
    int list[2];//две соседние вершины
    int j = 0;
    
    for(int i = 0; i < Bars; i++)
    {
     double peak = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 1, i);//поиск вершин
     if(peak != 0)
     {
       if(j < 2)
       {
        list[j] = i;
        j++;
       }
       else
        return;
     }
    }
    
    Print("РАССТОЯНИЕ - ", (list[1] - list[0]));
   
     
//----
   return(0);
  }

Если упростить код, выкинуть условие из цикла все норм работает

for(int i = 0; i < Bars; i++)
    {
       double peak = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 1, i);//поиск вершин
       if(peak != 0)
       {
        Print("Peak - ", peak);
       }
     }
 
al.k >>:

Код должен показать расстояние(количество баров) между двумя соседними вершинами, не работает даже принт в конце не отрабатывает.



Если упростить код, выкинуть условие из цикла все норм работает


как это он у вас работает если индекс линии индикатора 1 стоит

 
sanyooooook >>:

как это он у вас работает если индекс линии индикатора 1 стоит


Наверное потому-что у ZZ три буффера:

0 - вершины + впадины

1 - вершины

2 - впадины

 
al.k >>:

Наверное потому-что у ZZ три буффера:

0 - вершины + впадины

1 - вершины

2 - впадины

ага только рисуется по одному буферу, в окне данных глянь

 
мне не надо рисовать мне надо получить значения и распечатать их, упрощенный код работает 100%
 
al.k >>:
мне не надо рисовать мне надо получить значения и распечатать их, упрощенный код работает 100%

так и ставь индекс линии индикатора 0, только в этом случае получишь значение экстремумов(мин и макс), а отделять уже программно прийдется

 
sanyooooook >>:

так и ставь индекс линии индикатора 0, только в этом случае получишь значение экстремумов(мин и макс), а отделять уже программно прийдется


я хочу понять где ошибка, то что можно использовать нулевой буфер это я знаю
 

вот тут

iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 1, i)

поменять на вот так

iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, i)
 
      while(ZZ<2)
      {
         if (iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i)>=Open[i]&&iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i)>0) 
         {
            Hi=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
            BarHigh=i;
            ZZ++;
         }
         if (iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i)<=Open[i]&&iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i)>0) 
         {
            Lo=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
            BarLow=i;
            ZZ++;
         }
         i++;
      }
вот что-то подобное что вам нужно, только надо чуть подправить
 
al.k писал(а) >>

я хочу понять где ошибка
       else
        return;

Вы еще format c: вместо return напишите - точно никакой принт работать не будет :)

Видимо хотели написать break

 
SergNF >>:

Вы еще format c: вместо return напишите - точно никакой принт работать не будет :)

Видимо хотели написать break


Ошибку нашли, мое вам респект
Причина обращения: