Еще раз про ЗигЗаг и время

 

Подскажите пожалуйста,

Экстремумы зигзага беру следующим образом

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++;
  }

А как взять время этих экстремумов ?

 
AAE:

Подскажите пожалуйста,

Экстремумы зигзага беру следующим образом

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++;
  }

А как взять время этих экстремумов ?

Time[x1], Time[x2], Time[x3]

 
Reshetov:
AAE:

Подскажите пожалуйста,

Экстремумы зигзага беру следующим образом

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++;
  }

А как взять время этих экстремумов ?

Time[x1], Time[x2], Time[x3]

Спасибо !

 

а как вычислить число баров между ними? y1y2= y2y3=

y1 это последнее значение?(которое перерисовывается) если нет то как его вычислить? (y[0] )

 
А, что вам мешает вставить в текст дополнительную строку с оператором PRINT(...), в котором перечислить буквально все переменные, которые вас интересуют?

Или несколько операторов PRINT(), один до того как ..., другой после того?

Потом, с полученной распечаткой, полазить по графику, найти и посчитать вживую все бары. Ну и т.д. и т.п.

Попробуйте, вам понравится.
 
prorab:
А, что вам мешает вставить в текст дополнительную строку с оператором PRINT(...), в котором перечислить буквально все переменные, которые вас интересуют?

Или несколько операторов PRINT(), один до того как ..., другой после того?

Потом, с полученной распечаткой, полазить по графику, найти и посчитать вживую все бары. Ну и т.д. и т.п.

Попробуйте, вам понравится.

Спасибо .. отследил ... но y1 только правильно подсчитывается... подскажите как определить текущее значение точки y0 и значение точки y2 ... и не догнал как посчитать количество свечей между ними... помогите пожалуйста
 
disis:

Спасибо .. отследил ... но y1 только правильно подсчитывается... подскажите как определить текущее значение точки y0 и значение точки y2 ... и не догнал как посчитать количество свечей между ними... помогите пожалуйста
Вот же черт меня за язык дернул, ведь как чувствовал ...

Помогу, раз уж влез ...
1. сравнивать два вещественных числа нельзя, но если очень хочется, то задавать надо так:
... = 0.0; // присвоение
... == 0.0; // проверка на равенство
... != 0.0; // проверка на неравенство

2. цикл "while (y3==0)" задан неграмотно, условие должно быть заведомо выполнимым, например (sh < Bars) или (sh < 100). А вот когда будет найдена третья точка, там и выход из цикла, принудительный, командой "break;"
После цикла - проверка, какой был выход, принудительный или просто точка не найдена.

3. Если есть номера баров (x1, x2, x3), то как найти разницу между ними? Вычесть одно из другого, это и есть расстояние.

Дальше разбирайтесь сами. Удачи.
 
prorab:

2. цикл "while (y3==0)" задан неграмотно, условие должно быть заведомо выполнимым, например (sh < Bars) или (sh < 100). А вот когда будет найдена третья точка, там и выход из цикла, принудительный, командой "break;"
После цикла - проверка, какой был выход, принудительный или просто точка не найдена.

3. Если есть номера баров (x1, x2, x3), то как найти разницу между ними? Вычесть одно из другого, это и есть расстояние.

Дальше разбирайтесь сами. Удачи.





while (y3==0), будет выполнятся пока не найдем 3 экстремум, т.е. нашли 3 точку >> y3 не равно 0 >> выходим из цикла.

....disis: Вот скрипт, попробуйте.

//+------------------------------------------------------------------+
//|                                          экстремумы Зиг-Зага.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int ExtDepth=12;     // Depth
input int ExtDeviation=5;  // Deviation
input int ExtBackstep=3;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
double y3=0, y2=0, y1=0, zz;    // экстремумы Зиг-Зага
  int    x3, x2, x1, sh=0;// номера баров

  // Берём три экстремума Зиг-Зага
  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++;
  }
  Comment(" Время 1 экср. ",Time[x1],"  Время 2 экср. ",Time[x2],"  Время 3 экср. ",Time[x3],
     "\n"," Цена 1 экср. ",y1,"  Цена 2 экср. ",y2,"  Цена 3 экср. ",y3 ,
     "\n"," Бар 1 экср. №",x1,".  Бар 2 экср. №",x2,".  Бар 3 экср. №",x3,".", 
     "\n"," количество свечей между 1 и 2 экср.",x2-x1," шт.  или  ",int(MathAbs((y2-y1)/Point))," пунктов",
     "\n"," количество свечей между 2 и 3 экср.",x3-x2," шт.  или  ",int(MathAbs((y3-y2)/Point))," пунктов"); 
  }
//+------------------------------------------------------------------+
 
всем спасибо сейчас буду пробовать
 
r772ra:

while (y3==0), будет выполнятся пока не найдем 3 экстремум, т.е. нашли 3 точку >> y3 не равно 0 >> выходим из цикла.

....disis: Вот скрипт, попробуйте.

Подскажите пожалуйста как найти текущий экстремум т.е y0
 
disis:
Подскажите пожалуйста как найти текущий экстремум т.е y0

Текущий, это ближайший к 0 бару, так? Это y1.

смотри там в комменте все написано цена и время.



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