Трэнд ZigZag или Лучевая тактика

 
Добрый вечер всем! Вот сделал индикатор, который показывает куда направлен луч ZigZag на разных ТФ. Делал его для эксперта. Индикатор работает, но вот возникла одна проблемка... В эксперте он не хочет работать, т.е. показывает всегда трэнд = -1, а +1 у него нет. Никак не пойму в чем проблема... В эксперт вставляю его как функцию.  Сразу предупреждаю программировать начал совсем недавно,  так что .... Вот и сам индюк.
Файлы:
 
И для наглядности вставил его в стандартный эксперт MACD Sample.mq4. Подскажите пожайлуста в чем моя ошибка и как ее можно исправить. Заранее благодарен!

С уважением Dimi
Файлы:
 
Dimi:
Добрый вечер всем! Вот сделал индикатор, который показывает
куда направлен луч ZigZag на разных ТФ. Делал его для эксперта.
Индикатор работает, но вот возникла одна проблемка... В эксперте
он не хочет работать, т.е. показывает всегда трэнд = -1, а +1 у него нет.
Никак не пойму в чем проблема... В эксперт вставляю его как функцию.
 Сразу предупреждаю программировать начал совсем недавно,
 так что .... Вот и сам индюк. 
Привет Dimi.
Я вроде тебе отсылал шаблон эксперта на ZZ. Вот на всякий случай ещё вариант:
проверь, должно работать. Из комментов должно быть всё понятно.

extern int  ExtDepth     = 20;
extern int  ExtDeviation = 5;
extern int  ExtBackstep  = 3;
extern int  ZZTop        = 2;    // Количество последних нужных нам вершин ZZ для занесения в буфер.
extern bool Comments     = true; // false
 
string txt="";
int    ZZMaxBar,ZZMinBar,Zbar[],trend;// Буфер вершин 33, последняя вершина=Zbar[0], предпоследняя=Zbar[1] и т.д.
                                // возвращает кол-во баров от нулевого
double zz,ZZMax,ZZMin,Zval[];// Буфер значений 33, последнее значение=Zval[0], предпоследнее=Zval[1] и т.д.
//+------------------------------------------------------------------+
void init() { ArrayResize(Zbar,ZZTop); ArrayResize(Zval,ZZTop); } // Ограничиваем размеры массивов
//+------------------------------------------------------------------+
void deinit() { if(Comments) Comment(""); } // Удаляем комменты (если включены).
//+------------------------------------------------------------------+
int start() {
   int z; for(int x=0; x<Bars; x++) { zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,x);
   if(zz!=0 && zz!=EMPTY_VALUE) { Zbar[z]=x; Zval[z]=zz; z++; if(z>=ZZTop) break; }}
   if(Zval[0]>Zval[1]) { ZZMaxBar=Zbar[0]; ZZMinBar=Zbar[1]; ZZMax=Zval[0]; ZZMin=Zval[1]; txt="Вверх"; trend=-1; }
   if(Zval[1]>Zval[0]) { ZZMaxBar=Zbar[1]; ZZMinBar=Zbar[0]; ZZMax=Zval[1]; ZZMin=Zval[0]; txt="Вниз";   trend=1; }
//+------------------------------------------------------------------+
   if(Comments) Comment("ZZMaxBar  "+ZZMaxBar+"  ZZMinBar  "+ZZMinBar+"\n",
                        "ZZMax  ",ZZMax,"  ZZMin  ",ZZMin,"\nЛуч ZZ направлен  :  ",txt,"   trend  = ",trend);
   return(0); }
//+------------------------------------------------------------------+
 
Привет!!! Спасиб за ответ! Но есть одно но... Если я правильно понимаю, то сам trend ты в буфер не заносишь и поэтому вызвать сам трэнд через iCustom в эксперте не получится. Или я что-то не так понимаю??? Блин уже совсем запутался. ... Мне нужно чтоб именно эти условия вынести в буфер
if ( iClose(NULL,0,i+1)<=zigzag1 ) trend=-1;
if ( iClose(NULL,0,i+1)>=zigzag1 ) trend=1;
Как не пробовал ничего не получается....

И через iCustom не очень то и хотелось его вызывать тормозная она какая-то. Но для начало и так бы сошло... Честно говоря это мой первый индикатор и то основан на ZigZage Kloda. Надеюсь он на меня не сильно за это обидется...
 
Dimi:
Привет!!! Спасиб за ответ! Но есть одно но... Если я правильно понимаю, то сам trend ты в буфер не заносишь и поэтому вызвать сам трэнд через iCustom в эксперте не получится. Или я что-то не так понимаю??? Блин уже совсем запутался. ... Мне нужно чтоб именно эти условия вынести в буфер
if ( iClose(NULL,0,i+1)<=zigzag1 ) trend=-1;
if ( iClose(NULL,0,i+1)>=zigzag1 ) trend=1;
Как не пробовал ничего не получается....

И через iCustom не очень то и хотелось его вызывать тормозная она какая-то. Но для начало и так бы сошло... Честно говоря это мой первый индикатор и то основан на ZigZage Kloda. Надеюсь он на меня не сильно за это обидется...

Если нужно заносить значения в буфер, то этот же код вставь в индикатор,  и заноси в буфер всё что только пожелаешь.
Только не понятно, зачем тебе что то заносить в буфер, если и из экспа всё прекрасно расчитывается?
Специально не стал убирать оттуда лишний код (определение мин/мах и определение баров экстремумов),  чтобы было
легче понять что и откуда берётся. Если всё таки не получится,  напиши, сделаем вместе то что тебе нужно.
 

Ниразу не пробовал вызывать в эксперте IndicatorCounted() - даже не знаю что будет. Уберите цикл for (int i=0; i<limit; i++), вместо i поставьте 1. Да и в индикатре этот цикл не нужен.

 
Integer:

Ниразу не пробовал вызывать в эксперте IndicatorCounted() - даже не знаю что будет. Уберите цикл for (int i=0; i<limit; i++), вместо i поставьте 1. Да и в индикатре этот цикл не нужен.

Только с использованием функции IndicatorCounted() можно писать экономные, оптимизированные по ресурсам процессора, индикаторы.
 

Rosh, что с вами? Я писал про вызов IndicatorCounted() в эксперте. Автор темы пишет, что в эксперт функцию переносил, а в этой функции используется IndicatorCounted(). А в предложении "Да и в индикатре этот цикл не нужен" словом "индиктор" я подразумевал только индикатор фигурирующий в этой теме.

 
Integer:

Rosh, что с вами? Я писал про вызов IndicatorCounted() в эксперте. Автор темы пишет, что в эксперт функцию переносил, а в этой функции используется IndicatorCounted(). А в предложении "Да и в индикатре этот цикл не нужен" словом "индиктор" я подразумевал только индикатор фигурирующий в этой теме.

Слово эксперт пропустил, признаю... Но ничего обидного не сказал! :)
 
Спасиб всем огромное!!! Убрал из функции IndicatorCounter() и вроде бы заработало,  но пока точно сказать не могу так ли как надо работает. .. В визуале вроде бы не так еще понаблюдаю. А можно ли 
эту функцию один бар назад как-нибудь задать TrendByZigZag(4), если да,  то как???
Причина обращения: