Группа "Стол заказов MQL"

Рейтинг 2090



РЕКОМЕНДУЮ



Функция Zigzag

Здравствуйте.

Просьба написать функцию для определения наклона линии заг заг: восходящая или нисходящая.

Хочу передавать в функцию индекс свечи и параметры зигзага, а в ответ получить:
— 1, если свеча с указанным индексом находится на восходящей линии или максимуме
— 0, если на нисходящей или минимуме.

Функция будет использоваться в скрипте, поэтому болтающийся кончик зигзага меня не беспокоит особо:D . какое значение будет на тот момент, такое и будет:) 
Спасибо.*hi* 
  • 0
  • Просмотров: 2808
  • 1 августа 2016, 23:53
  • Enot-pipsun
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
Следующая запись в группе  
Торговый советник на индикаторе QQE для МТ4.
01 августа 2016
02 августа 2016

Комментарии (6)

+
+1
Отмеченные свечи на нисходящей линии или вне зиг-зага? :D  Как считать?


Вы используете этот зиг-заг?: www.mql5.com/ru/code/7796 (Зиг-зага не нашла в стандартных, а из пользовательских у меня оставлены только свои)
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 2 августа 2016, 00:24
+
0
Вы используете этот зиг-заг?: www.mql5.com/ru/code/7796


да именно он. стандартный.

Отмеченные свечи на нисходящей линии или вне зиг-зага?


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

пример. запрашиваю местонахождение 17 бара. получу в ответ «0»(int). значит он на падающем зиге. То есть надо найти соседние экстремумы и сравнить их. А я не могу догнать как их найти, для начала <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' :D '>&nbsp; 
и так для любой свечи до Bars-1.


Редактирован: 2 августа 2016, 06:34
avatar

  12  Enot-pipsun Автор Сообщений: 292

  • 2 августа 2016, 06:32
+
+1
Сделала скриптом, чтобы могли протестировать:
//+------------------------------------------------------------------+
//|                                                    Script_ZZ.mq4 |
//|                                                              Oxy |
//|                                   http://oxy.opentraders.ru/bio/ |
//+------------------------------------------------------------------+
#property copyright "Oxy"
#property link      "http://oxy.opentraders.ru/bio/"
#property version   "1.00"
#property strict
#property show_inputs
//------- external parameters ---------------------------------------+
input int    candle_index = 0;              // ИНДЕКС СВЕЧИ
input string pi           ="_____________"; // indicator`s parameters
input int    InpDepth     =12;              // Depth
input int    InpDeviation =5;               // Deviation
input int    InpBackstep  =3;               // Backstep
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
    int value = toZZ (candle_index,InpDepth,InpDeviation,InpBackstep);
    if(value==-1) Print("Зиг-зага еще нет на баре №",candle_index, "  По времени бар: ", Time[candle_index]);
    if(value==1)  Print("Бар №",candle_index, " на ВОСХОДЯЩЕЙ линии.", " По времени бар: ", Time[candle_index]);
    if(value==0)  Print("Бар №",candle_index, " на НИСХОДЯЩЕЙ линии.", " По времени бар: ", Time[candle_index]);
  }
//+------------------------------------------------------------------+
// 1 up;  0 down; -1 - нет еще зиг-зага 
int toZZ (int index, int depth, int deviation, int backstep) {
  double _right_value = valueZZright(index,depth,deviation,backstep);  if(_right_value==-1) return(-1);
  double _left_value  = valueZZleft (index+1,depth,deviation,backstep); if(_left_value==-1) return(-1);
  if(_left_value>_right_value) return(0);
  else return (1);  
  return(-1);
}
double valueZZright (int num, int depth, int deviation, int backstep) {
  for (int i=num; i>=0; i--) {
    double _zz = iCustom(NULL, 0, "zigzag",depth,deviation,backstep,0,i); 
    if(_zz!=0.0) return(_zz);
  }
  return(-1);
}
double valueZZleft (int num, int depth, int deviation, int backstep) {
  for (int i=num; i<Bars-1; i++) {
    double _zz = iCustom(NULL, 0, "zigzag",depth,deviation,backstep,0,i); 
    if(_zz!=0.0) return(_zz);
  }
  return(-1);
}
//+------------------------------------------------------------------+
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 2 августа 2016, 13:21
+
0
спасибо огромное, все работает как надо.<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' :D '>&nbsp;  Вот бы мне мозгов столько

Специально для себя лентяя цикл запилил, чтоб проверить:


//+------------------------------------------------------------------+
//|                                                    Script_ZZ.mq4 |
//|                                                              Oxy |
//|                                   http://oxy.opentraders.ru/bio/ |
//+------------------------------------------------------------------+
#property copyright "Oxy"
#property link      "http://oxy.opentraders.ru/bio/"
#property version   "1.00"
#property strict
#property show_inputs
//------- external parameters ---------------------------------------+
input int    candle_index = 37;              // ИНДЕКС СВЕЧИ
input string pi           ="_____________"; // indicator`s parameters
input int    InpDepth     =3;              // Depth
input int    InpDeviation =3;               // Deviation
input int    InpBackstep  =2;               // Backstep
int k;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
    for(k=0;k<=100;k++)
    {
    int value = toZZ (k,InpDepth,InpDeviation,InpBackstep);
    if(value==-1) Alert("Зиг-зага еще нет на баре №",k, "  По времени бар: ", Time[k]);
    if(value==1)  Alert("Бар №",k, " на ВОСХОДЯЩЕЙ линии.", " По времени бар: ", Time[k]);
    if(value==0)  Alert("Бар №",k, " на НИСХОДЯЩЕЙ линии.", " По времени бар: ", Time[k]);
    }
   } 
//+------------------------------------------------------------------+
// 1 up;  0 down; -1 - нет еще зиг-зага 
int toZZ (int index, int depth, int deviation, int backstep) {
  double _right_value = valueZZright(index,depth,deviation,backstep);  if(_right_value==-1) return(-1);
  double _left_value  = valueZZleft (index+1,depth,deviation,backstep); if(_left_value==-1) return(-1);
  if(_left_value>_right_value) return(0);
  else return (1);  
  return(-1);
}
double valueZZright (int num, int depth, int deviation, int backstep) {
  for (int i=num; i>=0; i--) {
    double _zz = iCustom(NULL, 0, "zigzag",depth,deviation,backstep,0,i); 
    if(_zz!=0.0) return(_zz);
  }
  return(-1);
}
double valueZZleft (int num, int depth, int deviation, int backstep) {
  for (int i=num; i<Bars-1; i++) {
    double _zz = iCustom(NULL, 0, "zigzag",depth,deviation,backstep,0,i); 
    if(_zz!=0.0) return(_zz);
  }
  return(-1);
}
//+------------------------------------------------------------------+



Редактирован: 2 августа 2016, 16:03
avatar

  12  Enot-pipsun Автор Сообщений: 292

  • 2 августа 2016, 16:02
+
+1
:D  Алерты не замучили в цикле-то? Проще тогда было их заменить на Print() и поглядывать во вкладку «эксперты».
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 2 августа 2016, 16:05
+
+1
не замучили. я их даже все прочитать успел пока они летели*pontorez* 

спасибо еще раз. ;) 

avatar

  12  Enot-pipsun Автор Сообщений: 292

  • 2 августа 2016, 16:15

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари