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

ZigZag Corrected

zigzag corrected fibo.mq5
Вы автор или правообладатель?

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

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

О программе

Индикатор «ZigZag Corrected» для MetaTrader 4 отображает на графике ZigZag-линию, соединяющую значимые максимумы и минимумы цены. Настраиваемые параметры глубины поиска и допуска отклонения позволяют адаптировать детализацию под любой таймфрейм и инструмент.

Индикатор автоматически строит уровни Фибоначчи между выделенными точками графика и поддерживает до 10 настраиваемых уровней с индивидуальными значениями и цветами. Дополнительно реализована маркировка точек ABCD для визуализации паттернов.

Предусмотрены интерактивные кнопки на графике для управления отображением отдельных Fibonacci-сегментов, а также система уведомлений об изменении направления ZigZag. Обновление данных выполняется по таймеру и при обработке событий графика.

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

НастройкаОписание
Lookback period - for highest or lowest of last (n) bars (includes current bar) (ExtDepth) Глубина поиска — Период поиска — количество баров для определения максимума или минимума
Pips (Points after decimal) tolerance in assigning Highs or Lows. Recommend increase value with time (ExtDeviation) Допуск отклонения — Допуск отклонения в пунктах при определении максимумов и минимумов
How many previous highs and lows are looked at in recalculating /repainting. Recommend '1'. (ExtBackstep) Количество откатов — Количество предыдущих максимумов и минимумов, учитываемых при пересчёте
ShowZigZag Показывать ZigZag — Отображение линии ZigZag на графике
ShowFibo Показывать Fibonacci — Отображение кнопок и уровней Фибоначчи
ShowFiboLevel1 Показать уровень Fibonacci 1 — Отображение первого уровня Фибоначчи
FiboLevel1 Уровень Fibonacci 1 — Значение первого уровня Фибоначчи
ShowFiboLevel2 Показать уровень Fibonacci 2 — Отображение второго уровня Фибоначчи
FiboLevel2 Уровень Fibonacci 2 — Значение второго уровня Фибоначчи
ShowFiboLevel3 Показать уровень Fibonacci 3 — Отображение третьего уровня Фибоначчи
FiboLevel3 Уровень Fibonacci 3 — Значение третьего уровня Фибоначчи
ShowFiboLevel4 Показать уровень Fibonacci 4 — Отображение четвёртого уровня Фибоначчи
FiboLevel4 Уровень Fibonacci 4 — Значение четвёртого уровня Фибоначчи
ShowFiboLevel5 Показать уровень Fibonacci 5 — Отображение пятого уровня Фибоначчи
FiboLevel5 Уровень Fibonacci 5 — Значение пятого уровня Фибоначчи
ShowFiboLevel6 Показать уровень Fibonacci 6 — Отображение шестого уровня Фибоначчи
FiboLevel6 Уровень Fibonacci 6 — Значение шестого уровня Фибоначчи
ShowFiboLevel7 Показать уровень Fibonacci 7 — Отображение седьмого уровня Фибоначчи
FiboLevel7 Уровень Fibonacci 7 — Значение седьмого уровня Фибоначчи
ShowFiboLevel8 Показать уровень Fibonacci 8 — Отображение восьмого уровня Фибоначчи
FiboLevel8 Уровень Fibonacci 8 — Значение восьмого уровня Фибоначчи
ShowFiboLevel9 Показать уровень Fibonacci 9 — Отображение девятого уровня Фибоначчи
FiboLevel9 Уровень Fibonacci 9 — Значение девятого уровня Фибоначчи
ShowFiboLevel10 Показать уровень Fibonacci 10 — Отображение десятого уровня Фибоначчи
FiboLevel10 Уровень Fibonacci 10 — Значение десятого уровня Фибоначчи
FibColor1 Цвет Fibonacci 1 — Цвет первого набора уровней Фибоначчи
FibColor2 Цвет Fibonacci 2 — Цвет второго набора уровней Фибоначчи
FibColor3 Цвет Fibonacci 3 — Цвет третьего набора уровней Фибоначчи
Show_ABCD Показывать ABCD — Отображение маркировки ABCD на графике
ABCD_Color Цвет ABCD — Цвет маркировки ABCD
ABCD_FontType Шрифт ABCD — Шрифт текста ABCD
ABCD_FontSize Размер шрифта ABCD — Размер шрифта текста ABCD
AlertMode Режим уведомлений — Режим уведомлений об изменении направления ZigZag
ID Идентификатор — Идентификатор объекта для именования элементов индикатора
button_note1 Примечание кнопок 1 — Текстовое примечание для первой группы кнопок
chart btn_corner for anchoring (btn_corner) Угол кнопок — Угол графика для привязки кнопок
btn_Subwindow Подокно кнопок — Подокно для размещения кнопок
btn_Font Шрифт кнопок — Шрифт текста кнопок
btn__font size (btn_FontSize) Размер шрифта кнопок — Размер шрифта кнопок
btn_text_color Цвет текста кнопок — Цвет текста кнопок
Horizontal location (button_x) Позиция X кнопок — Горизонтальное расположение кнопок
Vertical location (button_y) Позиция Y кнопок — Вертикальное расположение кнопок
button_note2 Примечание кнопок 2 — Текстовое примечание для второй группы кнопок
Получить полный код

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

???//+------------------------------------------------------------------+

#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=true;
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=true;
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 color FibColor1= clrRoyalBlue;
extern color FibColor2= clrDarkGoldenrod;
extern color FibColor3= clrGreen;
extern bool  Show_ABCD=true;
extern color ABCD_Color=clrSkyBlue;
input string ABCD_FontType = "Arial";
input int ABCD_FontSize = 8;

extern int   AlertMode = 0;
extern string ID = "";
extern string             button_note1          = "------------------------------";
extern ENUM_BASE_CORNER   btn_corner            = CORNER_RIGHT_UPPER; // chart btn_corner for anchoring
extern int                btn_Subwindow         = 0;
extern string             btn_Font              = "Arial";
extern int                btn_FontSize          = 8;                             //btn__font size
extern color              btn_text_color        = clrWhite;

extern int                button_x              = 2;               // Horizontal location
extern int                button_y              = 5;                // Vertical location
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;

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

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

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

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

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

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

Стоимость полного кода
1 586,90₽ ≈ $19.40