← К каталогу
Исходный код · ID 4424

!!!zigzag corrected fibo button.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор рассчитывает и отображает на графике паттерн ZigZag с коррекцией по допуску, используя заданные периоды обзора и допустимое отклонение для определения значимых максимумов и минимумов цены. На основе найденных точек перегибов строятся уровни Фибоначчи ретрейсмента и экстеншена между ключевыми свингами, а также метки ABCD-паттерна (X, A, B, C, D).

Индикатор предоставляет интерактивные кнопки на графике для включения и отключения сегментов Фибоначчи (AB, BC, CD) по клику. Поддерживается до 12 настраиваемых уровней Фибоначчи с индивидуальными цветами и подписями. При изменении направления ZigZag возможна отправка уведомлений-алертов.

Обновление данных происходит через таймер и обработку событий графика. Параметры точек привязки, шрифта, цвета и расположения элементов интерфейса настраиваются пользователем. Индикатор работает в терминале MetaTrader 5 на платформе MQL5.

Настройки программы

НастройкаОписание
ExtDepth Период обзора — количество последних баров (включая текущий), среди которых ищутся наивысшие или наинизшие значения для построения ZigZag.
ExtDeviation Допуск в пунктах (точках после десятичной точки) для присвоения максимумам и минимумам. Рекомендуется увеличивать значение при работе с большими таймфреймами.
ExtBackstep Количество предыдущих максимумов и минимумов, учитываемых при пересчёте и перерисовке ZigZag. Рекомендуется значение 1.
ShowZigZag Включает или отключает отображение линий ZigZag на графике.
ShowFibo Включает или отключает отображение кнопок переключения сегментов Фибоначчи (AB, BC, CD) на графике.
ShowFiboLevel1 Включает или отключает отображение первого уровня Фибоначчи.
FiboLevel1 Значение первого уровня Фибоначчи (по умолчанию 0.0).
ShowFiboLevel2 Включает или отключает отображение второго уровня Фибоначчи.
FiboLevel2 Значение второго уровня Фибоначчи (по умолчанию 0.236).
ShowFiboLevel3 Включает или отключает отображение третьего уровня Фибоначчи.
FiboLevel3 Значение третьего уровня Фибоначчи (по умолчанию 0.382).
ShowFiboLevel4 Включает или отключает отображение четвёртого уровня Фибоначчи.
FiboLevel4 Значение четвёртого уровня Фибоначчи (по умолчанию 0.500).
ShowFiboLevel5 Включает или отключает отображение пятого уровня Фибоначчи.
FiboLevel5 Значение пятого уровня Фибоначчи (по умолчанию 0.618).
ShowFiboLevel6 Включает или отключает отображение шестого уровня Фибоначчи.
FiboLevel6 Значение шестого уровня Фибоначчи (по умолчанию 0.764).
ShowFiboLevel7 Включает или отключает отображение седьмого уровня Фибоначчи.
FiboLevel7 Значение седьмого уровня Фибоначчи (по умолчанию 1.0).
ShowFiboLevel8 Включает или отключает отображение восьмого уровня Фибоначчи.
FiboLevel8 Значение восьмого уровня Фибоначчи (по умолчанию 1.618).
ShowFiboLevel9 Включает или отключает отображение девятого уровня Фибоначчи.
FiboLevel9 Значение девятого уровня Фибоначчи (по умолчанию 2.0).
ShowFiboLevel10 Включает или отключает отображение десятого уровня Фибоначчи.
FiboLevel10 Значение десятого уровня Фибоначчи (по умолчанию 2.618).
ShowFiboLevel11 Включает или отключает отображение одиннадцатого уровня Фибоначчи.
FiboLevel11 Значение одиннадцатого уровня Фибоначчи (по умолчанию 3.618).
ShowFiboLevel12 Включает или отключает отображение двенадцатого уровня Фибоначчи.
FiboLevel12 Значение двенадцатого уровня Фибоначчи (по умолчанию 4.618).
FibColor1 Цвет уровней Фибоначчи для первого сегмента (CD).
FibColor2 Цвет уровней Фибоначчи для второго сегмента (BC).
FibColor3 Цвет уровней Фибоначчи для третьего сегмента (AB).
Show_ABCD Включает или отключает отображение меток ABCD-паттерна (X, A, B, C, D) на графике.
ABCD_Color Цвет текста и элементов ABCD-паттерна (метки X, A, B, C, D).
ABCD_Width Размер (толщина) шрифта текста меток ABCD-паттерна.
AlertMode Режим отправки уведомлений при смене направления ZigZag (0 — без алертов, положительные значения — отправлять алерты).
ID Идентификатор (префикс) для именования объектов индикатора на графике.
button_note1 Текстовый параметр — заметка/разделитель для первой группы кнопок.
btn_corner Угол графика для привязки положения кнопок переключения.
btn_Font Шрифт текста на кнопках переключения сегментов Фибоначчи.
btn_FontSize Размер шрифта текста на кнопках переключения сегментов Фибоначчи.
btn_text_color Цвет текста на кнопках переключения сегментов Фибоначчи.
ButtonPos Горизонтальное смещение кнопок переключения сегментов Фибоначчи на графике.
button_note2 Текстовый параметр — заметка/разделитель для второй группы кнопок.
Получить полный код

Поиск по коду файла

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 clrRed

extern int ExtDepth = 12;     // *** Lookback period - for highest or lowest  of last (n) bars (includes current bar)
extern double ExtDeviation = 3;  // *** Pips (Points after decimal) tolerance in assigning Highs or Lows. Recommend increase value with time frame.
extern int ExtBackstep = 1;   // *** How many previous highs and lows are looked at in recalculating /repainting.  Recommend '1'.

double ZigzagBuffer[];
double HighMapBuffer[];
double LowMapBuffer[];
int level=3; // recounting's depth 
bool downloadhistory=true;
double myPoint;

extern bool  ShowZigZag=false;
extern bool  ShowFibo=true;
extern bool   ShowFiboLevel1 = true;
extern double FiboLevel1   = 0.0;
extern bool   ShowFiboLevel2=false;
extern double FiboLevel2   = 0.236;
extern bool   ShowFiboLevel3=true;
extern double FiboLevel3   = 0.382;
extern bool   ShowFiboLevel4=true;
extern double FiboLevel4   = 0.500;
extern bool   ShowFiboLevel5=true;
extern double FiboLevel5   = 0.618;
extern bool   ShowFiboLevel6=false;
extern double FiboLevel6   = 0.764;
extern bool   ShowFiboLevel7=true;
extern double FiboLevel7   = 1.0;
extern bool   ShowFiboLevel8=true;
extern double FiboLevel8   = 1.618;
extern bool   ShowFiboLevel9=true;
extern double FiboLevel9   = 2.0;
extern bool   ShowFiboLevel10=true;
extern double FiboLevel10   = 2.618;
extern bool   ShowFiboLevel11=true;
extern double FiboLevel11   = 3.618;
extern bool   ShowFiboLevel12=true;
extern double FiboLevel12   = 4.618;
extern color FibColor1= clrRoyalBlue;
extern color FibColor2= clrDarkGoldenrod;
extern color FibColor3= clrGreen;
extern bool  Show_ABCD=true;
extern color ABCD_Color=clrSkyBlue;
extern double   ABCD_Width=12;
extern int   AlertMode = 0;
extern string ID = "";
extern string             button_note1          = "------------------------------";
extern ENUM_BASE_CORNER   btn_corner            = CORNER_RIGHT_LOWER; // chart btn_corner for anchoring
extern string             btn_Font              = "Arial";
extern int                btn_FontSize          = 8;                             //btn__font size
extern color              btn_text_color        = clrWhite;
extern int                ButtonPos             = 0;
extern string             button_note2          = "------------------------------";

int Anchor_X,Anchor_A,Anchor_B,Anchor_C,Anchor_D,Anchor_E;
double posX,posA,posB,posC,posD; 
double pposA,pposB,pposC,pposD,pposX;
double topA,botA,topB,botB,topC,botC,topD,botD,topX,botX;
datetime TimeX,TimeA,TimeB,TimeC,TimeD,TS1,TS2,TS3,TT1,TT2,TT3;
double PS1,PT1,PS2,PT2,PS3,PT3;
double Fib1High,Fib1Low,Fib2High,Fib2Low,Fib3High,Fib3Low;

int level_count;
string level_name;
double text_y;

int AB_Fibo;
int BC_Fibo;
int CD_Fibo;

int AB_Zigzag;
int BC_Zigzag;
int CD_Zigzag;

int LastZigZag, PreviousZigZag,PreviousZigZag2,PreviousZigZag3,PreviousZigZag4;

int init()
  {
      // код доступен только после оплаты
   }

int deinit() 
{
	ObjectDelete(ID+"MyFibo1");
	ObjectDelete(ID+"MyFibo2");
	ObjectDelete(ID+"MyFibo3");

   ObjectDelete(ID+"X");
   ObjectDelete(ID+"B");
   ObjectDelete(ID+"A");
   ObjectDelete(ID+"C");
   ObjectDelete(ID+"D");

   ObjectDelete(ID+"ButtonAB");
   ObjectDelete(ID+"ButtonBC");
   ObjectDelete(ID+"ButtonCD");

return(0);}

int start()
  {
      // код доступен только после оплаты
   } 
   int i, counted_bars = IndicatorCounted();
   int limit,counterZ,whatlookfor;
   int shift,back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;

   if (counted_bars==0 && downloadhistory) // history was downloaded
     {
      ArrayInitialize(ZigzagBuffer,0.0);
      ArrayInitialize(HighMapBuffer,0.0);
      ArrayInitialize(LowMapBuffer,0.0);
     }
   if (counted_bars==0) 
     {
      limit=Bars-ExtDepth;
      downloadhistory=true;
     }
   if (counted_bars>0) 
     {
      ZigzagBuffer[i] = EMPTY_VALUE;
      HighMapBuffer[i] = EMPTY_VALUE;
      LowMapBuffer[i] = EMPTY_VALUE;

      while (counterZ<level && i<100)     //needed to plot going forward
        {
         res=ZigzagBuffer[i];
         if (res!=0) counterZ++;
         i++;
        }
      i--;
      limit=i;                         // limit is set here

      if (LowMapBuffer[i]!=0) 
        {
         curlow=LowMapBuffer[i];
         whatlookfor=1;
        }
      else
        {
         curhigh=HighMapBuffer[i];
         whatlookfor=-1;
        }
      for (i=limit-1;i>=0;i--)  
        {
         ZigzagBuffer[i]=0.0;  
         LowMapBuffer[i]=0.0;
         HighMapBuffer[i]=0.0;
        }
     }

   for(shift=limit; shift>=0; shift--)
     {
      HighMapBuffer[shift] = EMPTY_VALUE;
      LowMapBuffer[shift] = EMPTY_VALUE;

      val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else 
        { 
         lastlow=val; 
         if((Low[shift]-val)>(ExtDeviation*myPoint)) val=0.0;  
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=LowMapBuffer[shift+back];
               if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0; 
              }
           }
        } 

      LowMapBuffer[shift]=val; // ***

      val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else 
        {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*myPoint)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=HighMapBuffer[shift+back];
               if((res!=0)&&(res<val)) HighMapBuffer[shift+back]=0.0; 
              } 
           }
        }

      HighMapBuffer[shift]=val; // ***
     }

   if (whatlookfor==0)
     {
      lastlow=0;
      lasthigh=0;  
     }
   else
     {
      lastlow=curlow;
      lasthigh=curhigh;
     }
   for (shift=limit;shift>=0;shift--)
     {
      res=0.0;
      switch(whatlookfor)
        {
         case 0: // look for peak or lawn 
            if (lastlow==0 && lasthigh==0)
              {
               if (HighMapBuffer[shift]!=0)
                 {
                  lasthigh=High[shift];
                  lasthighpos=shift;
                  whatlookfor=-1;
                  ZigzagBuffer[shift]=lasthigh;
                  res=1;
                 }
               if (LowMapBuffer[shift]!=0)
                 {
                  lastlow=Low[shift];
                  lastlowpos=shift;
                  whatlookfor=1;
                  ZigzagBuffer[shift]=lastlow;
                  res=1;
                 }
              }
             break;  
         case 1: // look for peak
            if (LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)
              {
               ZigzagBuffer[lastlowpos]=0.0;
               lastlowpos=shift;
               lastlow=LowMapBuffer[shift];
               ZigzagBuffer[shift]=lastlow;
               res=1;
              }
            if (HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
              {
               lasthigh=HighMapBuffer[shift];
               lasthighpos=shift;
               ZigzagBuffer[shift]=lasthigh;
               whatlookfor=-1;
               res=1;
              }   
            break;               
         case -1: // look for lawn
            if (HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)
              {
               ZigzagBuffer[lasthighpos]=0.0;
               lasthighpos=shift;
               lasthigh=HighMapBuffer[shift];
               ZigzagBuffer[shift]=lasthigh;
              }
            if (LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
              {
               lastlow=LowMapBuffer[shift];
               lastlowpos=shift;
               ZigzagBuffer[shift]=lastlow;
               whatlookfor=1;
              }   
            break;               
         default: return(0); 
        }
     } // final cutting: for (shift=

   int h=0;
   while (ZigzagBuffer[h]==0) 
         {h++;}
   LastZigZag=h;
   h++;
   while (ZigzagBuffer[h]==0) 
         {h++;}
   PreviousZigZag=h;
   h++;
   while ( ZigzagBuffer[h]==0) 
      {h++;}
   PreviousZigZag2=h;
   h++;
   while ( ZigzagBuffer[h]==0) 
      {h++;}
   PreviousZigZag3=h;
   h++;
   while ( ZigzagBuffer[h]==0) 
      {h++;}
   PreviousZigZag4=h;

   topD=High[LastZigZag];
   botD=Low[LastZigZag];
   topC=High[PreviousZigZag];
   botC=Low[PreviousZigZag];
   topB=High[PreviousZigZag2];
   botB=Low[PreviousZigZag2];
   topA=High[PreviousZigZag3];
   botA=Low[PreviousZigZag3];
   topX=High[PreviousZigZag4];
   botX=Low[PreviousZigZag4];
   TimeD=Time[LastZigZag];
   TimeC=Time[PreviousZigZag];
   TimeB=Time[PreviousZigZag2];
   TimeA=Time[PreviousZigZag3];
   TimeX=Time[PreviousZigZag4];
   if(topD>topC)// D IS A PEAK
      {//defining fib1 as CD retracement
         TS1=TimeC;
         PS1=botC;
         TT1=TimeD;
         PT1=topD;
         if (topB<topD)
         {//defining fib2 as BC retracement
            TS2=TimeB;
            PS2=topB;
            TT2=TimeC;
            PT2=botC;
         }
         if (topB>=topD)
         {//defining fib2 as BC extension
            TS2=TimeB;
            PS2=topB;
            TT2=TimeC;
            PT2=botC;
         }

         {//defining fib3 as AB retracement
            TS3=TimeA;
            PS3=botA;
            TT3=TimeB;
            PT3=topB;
         }
      }

      if(botD<botC)// D IS A TROUGH
      {//defining fib1 as CD retracement
         TS1=TimeC;
         PS1=topC;
         TT1=TimeD;
         PT1=botD;
         if (botB<=botD)
         {//defining fib2 as BC retracement
            TS2=TimeB;
            PS2=botB;
            TT2=TimeC;
            PT2=topC;
         }
         if (botB>botD)
         {//defining fib2 as BC extension
            TS2=TimeB;
            PS2=botB;
            TT2=TimeC;
            PT2=topC;
         }

            TS3=TimeA;
            PS3=topA;
            TT3=TimeB;
            PT3=botB;

      }    

  if(botD<botC && topD<topC)// D IS A TROUGH
      {//Alert("cas 1");

      posD =botD; Anchor_D = ANCHOR_UPPER;
      posC =topC; 

Показано первые 50% кода (символов: 16035)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 603,50₽ ≈ $19.60