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

Рейтинг 2087



РЕКОМЕНДУЮ



Индикатор зиг-заг с алертом

Нужен индикатор зиг-заг с алертом и окном оповещения на каком ТФ и на какой валютной паре…
  • 0
  • Просмотров: 9270
  • 21 сентября 2015, 19:26
  • DEDaa
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
Следующая запись в группе  
прикрутить к сову идентификатор ордеров
20 сентября 2015
22 сентября 2015

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

+
0
Сделать алерт к обычному зигзагу?
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 21 сентября 2015, 20:18
+
0
Да к самому обыкновенному…
12-5-3 Важно, что бы сигнал поступал по окончанию луча индюка…


Редактирован: 22 сентября 2015, 08:41
avatar

  2  DEDaa Автор Сообщений: 53

  • 22 сентября 2015, 05:09
+
0
Как только появляется новый зигзаг индикатор начитает пиликать.

www.opentraders.ru/downloads/874/

avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 22 сентября 2015, 11:31
+
0
Сигнал нужен по окончанию луча зиг-зага… потому.что дальше отслеживается разворотная свеча и открывается сделка по её (свечи)закрытию, а по окончанию луча зиг-зага выставляется стоп лосс… А если сигнал поступает при отрисовке нового луча зиг-зага получается большой стоп… и большое опоздание по входу… т.е теряется смысл… если можно сделайте как я описал… Окончанием или началом луча зиг-зага я считаю угол где лучи сходятся или расходятся… т.е.это начало или конец той волны… которую отображает эта линия (луч) зиг-зага… Мне нужен сигнал по окончанию луча.или волны..!(Не смог прикрепить скрин..)
Редактирован: 22 сентября 2015, 13:47
avatar

  2  DEDaa Автор Сообщений: 53

  • 22 сентября 2015, 13:29
+
0
Что для вас окончание зигзага? Индикатор может перерисовываться при каждом обновлении вершинки или на каждой свече. Опишите подробнее, что именно нужно. желательно со скринами.
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 22 сентября 2015, 13:41
+
0
Пусть перерисовывается..., что бывает редко, как правило… если правильно определена разворотная свеча… значит вход правильный и стоп короткий… Ну если нет то СТОП....(издержки производства)
avatar

  2  DEDaa Автор Сообщений: 53

  • 22 сентября 2015, 13:53
+
0
Просьба описать все как можно подробнее. Можно на примере, который я уже сделал. Со скринами и пояснениями: сейчас сигналит здесь, а нужно вот тут.
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 22 сентября 2015, 13:58
+
0
Скринов нет…
avatar

  2  DEDaa Автор Сообщений: 53

  • 22 сентября 2015, 14:01
+
0
Скрины не вижу…
avatar

  2  DEDaa Автор Сообщений: 53

  • 22 сентября 2015, 14:16
+
0
Сделал еще вариант. Показывает цену окончания луча, пару, ТФ и сигналит после того как свеча сформировалась. Вот инструкция, как вставлять картинки: project.opentraders.ru/862.html




//+------------------------------------------------------------------+
//|                                                  ZigZagAlert.mq4 |
//|                   Copyright 2006-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2006-2014, MetaQuotes Software Corp."
#property link      "http://www.mql4.com"
#property strict

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1  Red
//---- indicator parameters
input int InpDepth=12;     // Depth
input int InpDeviation=5;  // Deviation
input int InpBackstep=3;   // Backstep
//---- indicator buffers
double ExtZigzagBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];
//--- globals
int    ExtLevel=3; // recounting's depth of extremums
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(InpBackstep>=InpDepth)
     {
      Print("Backstep cannot be greater or equal to Depth");
      return(INIT_FAILED);
     }
//--- 2 additional buffers
   IndicatorBuffers(3);
//---- drawing settings
   SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers
   SetIndexBuffer(0,ExtZigzagBuffer);
   SetIndexBuffer(1,ExtHighBuffer);
   SetIndexBuffer(2,ExtLowBuffer);
   SetIndexEmptyValue(0,0.0);
//---- indicator short name
   IndicatorShortName("ZigZag("+string(InpDepth)+","+string(InpDeviation)+","+string(InpBackstep)+")");
//---- initialization done
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int    i,limit,counterZ,whatlookfor=0;
   int    back,pos,lasthighpos=0,lastlowpos=0;
   double extremum;
   double curlow=0.0,curhigh=0.0,lasthigh=0.0,lastlow=0.0;
//--- check for history and inputs
   if(rates_total<InpDepth || InpBackstep>=InpDepth)
      return(0);
//--- first calculations
   if(prev_calculated==0)
      limit=InitializeAll();
   else
     {
      //--- find first extremum in the depth ExtLevel or 100 last bars
      i=counterZ=0;
      while(counterZ<ExtLevel && i<100)
        {
         if(ExtZigzagBuffer[i]!=0.0)
            counterZ++;
         i++;
        }
      //--- no extremum found - recounting all from begin
      if(counterZ==0)
         limit=InitializeAll();
      else
        {
         //--- set start position to found extremum position
         limit=i-1;
         //--- what kind of extremum?
         if(ExtLowBuffer[i]!=0.0)
           {
            //--- low extremum
            curlow=ExtLowBuffer[i];
            //--- will look for the next high extremum
            whatlookfor=1;
           }
         else
           {
            //--- high extremum
            curhigh=ExtHighBuffer[i];
            //--- will look for the next low extremum
            whatlookfor=-1;
           }
         //--- clear the rest data
         for(i=limit-1; i>=0; i--)
           {
            ExtZigzagBuffer[i]=0.0;
            ExtLowBuffer[i]=0.0;
            ExtHighBuffer[i]=0.0;
           }
        }
     }
//--- main loop      
   for(i=limit; i>=0; i--)
     {
      //--- find lowest low in depth of bars
      extremum=low[iLowest(NULL,0,MODE_LOW,InpDepth,i)];
      //--- this lowest has been found previously
      if(extremum==lastlow)
         extremum=0.0;
      else
        {
         //--- new last low
         lastlow=extremum;
         //--- discard extremum if current low is too high
         if(low[i]-extremum>InpDeviation*Point)
            extremum=0.0;
         else
           {
            //--- clear previous extremums in backstep bars
            for(back=1; back<=InpBackstep; back++)
              {
               pos=i+back;
               if(ExtLowBuffer[pos]!=0 && ExtLowBuffer[pos]>extremum)
                  ExtLowBuffer[pos]=0.0;
              }
           }
        }
      //--- found extremum is current low
      if(low[i]==extremum)
         ExtLowBuffer[i]=extremum;
      else
         ExtLowBuffer[i]=0.0;
      //--- find highest high in depth of bars
      extremum=high[iHighest(NULL,0,MODE_HIGH,InpDepth,i)];
      //--- this highest has been found previously
      if(extremum==lasthigh)
         extremum=0.0;
      else
        {
         //--- new last high
         lasthigh=extremum;
         //--- discard extremum if current high is too low
         if(extremum-high[i]>InpDeviation*Point)
            extremum=0.0;
         else
           {
            //--- clear previous extremums in backstep bars
            for(back=1; back<=InpBackstep; back++)
              {
               pos=i+back;
               if(ExtHighBuffer[pos]!=0 && ExtHighBuffer[pos]<extremum)
                  ExtHighBuffer[pos]=0.0;
              }
           }
        }
      //--- found extremum is current high
      if(high[i]==extremum)
         ExtHighBuffer[i]=extremum;
      else
         ExtHighBuffer[i]=0.0;
     }
//--- final cutting 
   if(whatlookfor==0)
     {
      lastlow=0.0;
      lasthigh=0.0;
     }
   else
     {
      lastlow=curlow;
      lasthigh=curhigh;
     }
   for(i=limit; i>=0; i--)
     {
      switch(whatlookfor)
        {
         case 0: // look for peak or lawn 
            if(lastlow==0.0 && lasthigh==0.0)
              {
               if(ExtHighBuffer[i]!=0.0)
                 {
                  lasthigh=High[i];
                  lasthighpos=i;
                  whatlookfor=-1;
                  ExtZigzagBuffer[i]=lasthigh;
                 }
               if(ExtLowBuffer[i]!=0.0)
                 {
                  lastlow=Low[i];
                  lastlowpos=i;
                  whatlookfor=1;
                  ExtZigzagBuffer[i]=lastlow;
                 }
              }
            break;
         case 1: // look for peak
            if(ExtLowBuffer[i]!=0.0 && ExtLowBuffer[i]<lastlow && ExtHighBuffer[i]==0.0)
              {
               ExtZigzagBuffer[lastlowpos]=0.0;
               lastlowpos=i;
               lastlow=ExtLowBuffer[i];
               ExtZigzagBuffer[i]=lastlow;
              }
            if(ExtHighBuffer[i]!=0.0 && ExtLowBuffer[i]==0.0)
              {
               lasthigh=ExtHighBuffer[i];
               lasthighpos=i;
               ExtZigzagBuffer[i]=lasthigh;
               whatlookfor=-1;
              }
            break;
         case -1: // look for lawn
            if(ExtHighBuffer[i]!=0.0 && ExtHighBuffer[i]>lasthigh && ExtLowBuffer[i]==0.0)
              {
               ExtZigzagBuffer[lasthighpos]=0.0;
               lasthighpos=i;
               lasthigh=ExtHighBuffer[i];
               ExtZigzagBuffer[i]=lasthigh;
              }
            if(ExtLowBuffer[i]!=0.0 && ExtHighBuffer[i]==0.0)
              {
               lastlow=ExtLowBuffer[i];
               lastlowpos=i;
               ExtZigzagBuffer[i]=lastlow;
               whatlookfor=1;
              }
            break;
        }
     }
//--- done
   if(ExtZigzagBuffer[1]>0) Alert("Окончание луча: " + DoubleToString(ExtZigzagBuffer[1],Digits) + " " +Symbol() + " " + IntegerToString(Period()));
   Comment("\n ZZ0: ",ExtZigzagBuffer[0],
           "\n Окончание луча: ",ExtZigzagBuffer[1],
           "\n Верхний излом: ",ExtHighBuffer[0],
           "\n Нижний излом: ",ExtLowBuffer[0]);
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int InitializeAll()
  {
   ArrayInitialize(ExtZigzagBuffer,0.0);
   ArrayInitialize(ExtHighBuffer,0.0);
   ArrayInitialize(ExtLowBuffer,0.0);
//--- first counting position
   return(Bars-InpDepth);
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 22 сентября 2015, 14:34
+
0
КАК мне его в МТ вставить...? это же открытый код..?
avatar

  2  DEDaa Автор Сообщений: 53

  • 22 сентября 2015, 15:23
+
0
Тут инструкция — start.opentraders.ru/12302.html
См. раздел «ДОБАВЛЕНИЕ СОВЕТНИКА В ВИДЕ КОДА»
avatar

  45  Bishop Сообщений: 5720 - АЛЬФАХАМЕЦ-Машковод

  • 22 сентября 2015, 15:34
+
0
Не получается у меня вставить его в МТ открытым кодом… Вышлите мне его в виде файла… не понимаю я в этом ни чего...)
avatar

  2  DEDaa Автор Сообщений: 53

  • 22 сентября 2015, 16:18
+
0
Вот файлик: www.opentraders.ru/downloads/874/
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 22 сентября 2015, 17:39
+
0
Андрей, большое спасибо! То что вы сделали (Сделал еще вариант. Показывает цену окончания луча, пару, ТФ и сигналит после того как свеча сформировалась.)это то что нужно! Единственное, что нужно поправить, это что бы сигнал выдавался один раз после сформировавшейся свечи, а он сигналит бесконечно… это мешает… даже если индикатор установлен на одной паре..! Поправте пожалуста!
avatar

  2  DEDaa Автор Сообщений: 53

  • 23 сентября 2015, 08:04
+
0
Подскажите, могли бы Вы, изменить настройки так, чтобы индикатор выдавал сигнал, только при изменении направления тренда (при появлении ломаной) и всё! Данный индикатор, так же сигнализирует о продолжении тренда, а это мешает. Помогите если возможно, пожалуйста.
С уважением, Александр.
avatar

  2  bog_alvar Сообщений: 3

  • 27 сентября 2016, 15:45
+
0
Подскажите, могли бы Вы, изменить настройки так, чтобы индикатор выдавал сигнал, только при изменении направления тренда (при появлении ломаной) и всё! Данный индикатор, так же сигнализирует о продолжении тренда, а это мешает. Помогите если возможно, пожалуйста.
С уважением, Александр.
avatar

  2  bog_alvar Сообщений: 3

  • 27 сентября 2016, 15:47
+
0
я делаю так — создаю текстовый документ, вставляю туда скопированное, сохраняю и просто переименовываю формат .txt в .mq4 меня так устраивает))
Редактирован: 27 сентября 2016, 18:43
avatar

  10  cardon Сообщений: 376

  • 27 сентября 2016, 18:42
+
0
Сейчас сигналит 1 раз: www.opentraders.ru/downloads/874/

avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 23 сентября 2015, 12:08
+
0
Дружище, огромное спасибо за труд (только сейчас случайно увидел). Но к сожалению, не всегда выдаёт звуковые сигналы. Можно будет это как то исправить. Заранее огромное спасибо!!!
avatar

  2  bog_alvar Сообщений: 3

  • 8 марта 2017, 11:45
+
0
Добрый день, Андрей. Спасибо большое за нужный индикатор.
После образования нового луча он выдаёт звук при завершении каждой следующей свечи.
Можно ли сделать так, чтоб он выдавал звук один раз при образовании нового луча только одной первой свечой?

Редактирован: 14 сентября 2020, 11:23
avatar

  1  Zigzag-U Сообщений: 3

  • 11 сентября 2020, 14:32

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