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

ZigZag SG

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

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

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

О программе

ZigZag SG — это пользовательский индикатор для платформы MetaTrader 4, рассчитывающий аналитическую ZigZag-линию на графике цены. Индикатор использует три внешних параметра для управления расчётом, что позволяет настраивать детализацию отображаемых значений.

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

Индикатор работает в окне графика и поддерживает пересчёт при получении новых данных. При деинициализации удаляются созданные графические объекты, предотвращая остаточные элементы на графике.

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

НастройкаОписание
ExtDepth ExtDepth — Задаёт глубину анализа в барах для определения ключевых точек при расчёте индикатора.
ExtDeviation ExtDeviation — Устанавливает минимальное отклонение в пунктах, при превышении которого точка считается незначимой.
ExtBackstep ExtBackstep — Определяет количество баров для пересмотра ранее рассчитанных значений при построении линии индикатора.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow
#property indicator_width1 1

extern int ExtDepth       = 13;
extern int ExtDeviation   =  5;
extern int ExtBackstep    =  5;

double ZigzagBuffer[];
double HighMapBuffer[];
double LowMapBuffer[];

int level=3; // recounting's depth 
bool downloadhistory=false;
double acehigh[];
double high;
double acelow[];
double low;

void PrintText (string text, string objName, double textColor, double row, double column)
{
   int rowHeight = 15;

   ObjectCreate( objName, OBJ_LABEL, 0, 0, 0 );
   ObjectSet( objName, OBJPROP_COLOR, textColor );
   ObjectSet( objName, OBJPROP_CORNER, 3 );
   ObjectSet( objName, OBJPROP_XDISTANCE, column );
   ObjectSet( objName, OBJPROP_YDISTANCE, row*rowHeight);
   ObjectSetText( objName, text, 10, "Terminal" );
}

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

   for (i=1;i<=3;i++)
   {
      ObjectDelete("item"+i);
   }
}

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

   double vertices[10];
   double vertexPos[10];
   int vertexIndex;

    ObjectDelete("high");
    ObjectDelete("low");

   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) 
     {
      while (counterZ<level && i<100)
        {
         res=ZigzagBuffer[i];
         if (res!=0) counterZ++;
         i++;
        }
      i--;
      limit=i;
      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--)
     {
      val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else 
        { 
         lastlow=val; 
         if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=LowMapBuffer[shift+back];
               if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0; 
              }
           }
        } 
      if (Low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]=0.0;

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

   if (whatlookfor==0)
     {
      lastlow=0;
      lasthigh=0

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

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

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

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

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

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

Стоимость полного кода
473,70₽ ≈ $5.79