Как получить значение индикатора ZigZag в точках...

 
Уважаемые гуру и другие адепты MQ4
Я прикрепил схемку. Это стандартный ZigZag.
Огромная просьба сделайте плиз кусочек кода, чтобы получить значение индикатора ZigZag в точках 1 и 2. Если не сложно, то и 3. Т. е. только те точки, на которых уже уголок образовался. А которая еще крайняя - ненадо.
Плиз.
Файлы:
 
//в общей секции внешние переменные индикатора ZigZag 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; } }


Гарантия 0%
 
// в модуле extern int ExtDepth = 12; extern int ExtDeviation = 5; extern int ExtBackstep = 3; extern int ShiftBars = 2; // в функции double y3=0, y2=0, y1=0, zz; // экстремумы Зиг-Зага int x3, x2, x1, sh=ShiftBars;// номера баров // Берём три экстремума Зиг-Зага while (y3==0) { zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh); if (zz!=0 && zz!=EMPTY_VALUE) { if (y1==0) { x1=sh; y1=zz; } else if (y2==0) { x2=sh; y2=zz; } else if (y3==0) { x3=sh; y3=zz; } } sh++; }
 
Уау. Спасибо. Вот профессиональный подход. Сразу видно. Очень помогли, друзья.
 
Integer:
double zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
Обясните дураку что передает индикатор iCustom если он не где не описан?
Или лучше скажите какое значение примет "zz" в том или ином случае в описанных примерах.
Заранее спасибо.
 
iCustom() - это функция для получения значений ползовательского индикатора (индикатора, который расположен в каталоге indicators в виде файла .mq4 и откомпилированого в .ex4).

Аргументы:

1 - Символ. NULL, значит тот символ, на который присоединен индикатор вызывающий эту функцию
2 - Тамфрейм. 0 - тот таймфрейм на который присоединен индикатор вызывающий эту функцию
3 - Имя пользовательского индикатора (имя файла без расширения).

затем идут переменные-настройти вызываемого индикатора. Открываешь вызываемый пользовательский индикатор и смотришь какие в нем определены внешние extern переменные, и в том же порядке передаешь их в iCustom. У зигзага три переменных - ExtDepth,ExtDeviation,ExtBackstep. Можно и сразу числами передать, если настраивать не надо 12,5,3. Короче это параметры с которыми зигзаг строится.

Предпоследний аргумент - номер буфера из пользовательского индикатора. У зиг-заго он один, значит пишем 0, что значит первый буфер. Если буферов больше, цепляешь индикатор на график, смотришь значений какой линии тебе нужны, затем смотришь в окне свойст во вкладке изменения цветов, на каком месте стоит эта линия, таким образом получаешь номер буфера. (Отсчет с нуля).

Последний аргумент, i - номер бара с которого берешь значение индикатора. 0 - самый новый бар, и т.д.

Там где нет излома зиг-заг обычно возвращает 0, иначе значение. Поэтому, для того чтобы найти излом проверяется неравенство значения zz нулю, и для универсальности EMPTY_VALUE, так у некоторых индикаторов может быть не определено пустое значение, как это сделано у зигзага, в этом случае он возвращает константу EMPTY_VALUE.
 
Integer:
.................
Спасибо!!!
Непонятно почему при редактировании стёрлось моё первоначальное замечаниеи :(
Вот оно:
тааак-с, может глюки? Вчера в сообщении был вопрос
"что Вы думаете по этому поводу?"

Чтоб ответить, ума много не надо - 100% слив. Учась программировать, я много создал експертов используя подобную тему. Результат 100% слив. А я применяю правило, "в реале слив больше в 2 раза чем в МТС"
 
Подскажите, в какой переменной в стандартном ZigZag появляется знаечение экстреммума? Попробовал if (res>0) не оно. Или может у когото есть Zigzag который хранит значения нескольких точек в глобальных переменных. А то, если искать экстреммумы на i-том баре получается очень медленно.
 

Добрый день.

Уважаемые гуру. не могли бы вы в этой же теме подсказать,пожалуйста.

Maloma просил, чтобы значения ЗигЗага подписывались от нулевого бара и дальше 3 значения...т.е. справа на лево.

Может ли кто-нибудь помочь сделать кусочек кода...в котором каждое значения зигзага будет подписываться справа на лево..начиная с time_start. (time_start - дата с которой начинает работать индикатор).

Подпись типа:

low1_1.4315

high1_1.4326

low2_1.4320

high2_1.4345

low3_1.4329

high3_1.4370

и т.д.

Спасибо.

 

Никто не подскажет?

 

приветствую.

вот, воспользовался ZZ из терминала и кусочком кода от

почуял что-то неладное и решил проверить правильно ли нумеруются вершины, добавил в код стрелку на первую вершину по рисунку в начале темы - оказалось что в разное время вершины нумерюются по-разному, хотя перелома ZZ еще небыло.:

extern int  ExtDepth     = 12;
extern int  ExtDeviation = 5;
extern int  ExtBackstep  = 3;
extern int  ShiftBars    = 2;
double y3, y2, y1, zz;// 
int    x3, x2, x1, sh;// 
double ChangY1;
//---------------------------------------------------------+
int start()
  {
  y3=0; 
  y2=0; 
  y1=0;
  sh=ShiftBars;
  while (y3==0)
    {
    zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
    if (zz!=0 && zz!=EMPTY_VALUE) 
      {
      if      (y1==0) { x1=sh; y1=zz; }
      else if (y2==0) { x2=sh; y2=zz; }
      else if (y3==0) { x3=sh; y3=zz; }
      }
    sh++;
    }
  string name=TimeToStr(Time[x1]);
  ObjectCreate (name,22,0,Time[x1],High[x1]-15*Point);
  }
//-------------------------------------------------------+

вот скриншоты:

помогите разобраться что не так!

Причина обращения: