Люди, выложите кто нибудь нормальный рабочий ZZ!!! Чтобы во сех 3-х его буферах были значения. Все варианты перепробовал но HighMapBuffer и LowMapBuffer постоянно в нулях......
- Поиск максимумов и минимумов
- Написал советник, есть проблема.
- Нужна небольшая переделка стандартного индикатора Zigzag
Смотрите код ЗЗ, там все ответы.
в нормальном зигзаге есть только 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--; }тут перетаскивается ЗЗ со старшего ТФ, но принцип тот же
Спасибо! Хотя бы про ЗЗ понятней стало))
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь