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

Gann_S9

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

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

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

О программе

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

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

Индикатор не использует внешние библиотеки и не выполняет торговых операций. Все расчёты и построения выполняются локально на клиентской стороне в среде MetaTrader 4.

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

НастройкаОписание
angle_up Угол восходящих линий — Угол наклона линий для восходящих уровней
angle_dn Угол нисходящих линий — Угол наклона линий для нисходящих уровней
Width Толщина линий — Толщина линий уровней
Style Стиль линий — Стиль линий уровней (значение стиля графического объекта)
kol_lev Количество уровней — Количество отображаемых уровней в каждом комплекте
ResistanceColor Цвет сопротивления — Цвет линий уровней сопротивления
SupportColor Цвет поддержки — Цвет линий уровней поддержки
Level_0 Цвет уровня 0 — Цвет горизонтального уровня нулевой линии
lev_V Отображать вертикальные линии — Переключатель отображения вертикальных линий-меток
Level_V Цвет вертикальных линий — Цвет вертикальных линий-меток времени
Complect Комплект — Индекс текущего комплекта уровней для идентификации объектов на графике
ExtDepth Глубина ZigZag — Глубина расчёта ZigZag — минимальное число баров между значимыми точками разворота
ExtDeviation Отклонение ZigZag — Минимальное отклонение цены в пунктах для признания точки разворота значимой
ExtBackstep Шаги возврата — Количество шагов возврата при расчёте ZigZag-паттернов
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers  1
#property indicator_color1 AliceBlue

#property indicator_width1 0
#property indicator_style1 2

extern double  angle_up        = 22.5;
extern double  angle_dn        = 22.5;
extern int     Width           = 0;
extern int     Style           = 2;
extern int     kol_lev         = 8;
extern color   ResistanceColor = Tomato;
extern color   SupportColor    = DodgerBlue;
extern color   Level_0         = LightSteelBlue;
extern bool    lev_V           = true;
extern color   Level_V         = LightSteelBlue;
extern int     Complect        = 0;
color ????_??????;

extern int ExtDepth=21;
extern int ExtDeviation=5;
extern int ExtBackstep=3;

double ZigZagBuffer[];
int timeFirstBar=0;
int flag;
bool work=true;
double vel_prev;

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

int deinit()
  {

 ObjDel();
 Comment("");

   return(0);
  }  

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

   if (Bars-1<ExtDepth)return(0);

   static int time2,time3,time4;  

   static  double ZigZag2,ZigZag3,ZigZag4;

   int MaxBar,limit,supr2_bar,supr3_bar,supr4_bar,counted_bars=IndicatorCounted();

   if (counted_bars<0)return(-1);

   if (counted_bars>0) counted_bars--;

   int    index, shift, back,lasthighpos,lastlowpos;
   double val,res,TempBuffer[1];
   double curlow,curhigh,lasthigh,lastlow;

   int    metka=0; // =0 - ?? ??????? ???????? ZZ. =1 - ???? ????? ??????????. =2 - ???? ????? ?????????.

   MaxBar=Bars-ExtDepth; 

   if (counted_bars==0 || Bars-counted_bars>2)
     {
      limit=MaxBar;
     }
   else 
     {

      supr2_bar=iBarShift(NULL,0,time2,TRUE);
      supr3_bar=iBarShift(NULL,0,time3,TRUE);
      supr4_bar=iBarShift(NULL,0,time4,TRUE);

      limit=supr3_bar;      
      if ((supr2_bar<0)||(supr3_bar<0)||(supr4_bar<0))
         {
          limit=MaxBar;
         }
     }

   if (limit>=MaxBar || timeFirstBar!=Time[Bars-1]) 
     {
      timeFirstBar=Time[Bars-1];
      limit=MaxBar; 
     } 

if (limit==MaxBar) ArrayResize(TempBuffer,Bars); else  ArrayResize(TempBuffer,limit+ExtBackstep+1);

   for(shift=limit; shift>=0; shift--)
     {

      val=Low[Lowest(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=ZigZagBuffer[shift+back];
               if((res!=0)&&(res>val)) ZigZagBuffer[shift+back]=0.0; 
              }
           }
        }
      if (Low[shift]==val)
        {
         ZigZagBuffer[shift]=val; 

        }
      else ZigZagBuffer[shift]=0.0;

      val=High[Highest(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=TempBuffer[shift+back]; 
               if((res!=0)&&(res<val)) TempBuffer[shift+back]=0.0; 
              } 
           }
        }
      if (High[shift]==val)
        {
         TempBuffer[shift]=val; 

        }
      else TempBuffer[shift]=0.0;
     }

      lasthigh=-1; lasthighpos=-1;
      lastlow= -1; lastlowpos= -1;

   for(shift=limit; shift>=0; shift--)
     {
      curlow=ZigZagBuffer[shift];
      curhigh=TempBuffer[shift];
      if((curlow==0)&&(curhigh==0)) continue;

      if(curhigh!=0)
        {
         if(lasthigh>0) 
           {
            if(lasthigh<curhigh) TempBuffer[lasthighpos]=0;
            else TempBuffer[shift]=0;
           }

         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }

      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ZigZagBuffer[lastlowpos]=0;
            else ZigZagBuffer[shift]=0;
           }

         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=-1;
        }
     }

   for(shift=limit; shift>=0; shift--)
     {
       res=TempBuffer[shift];
       if(res!=0.0) ZigZagBuffer[shift]=res;
     }

   int i=0,j=0;
   res=0;
   for (shift=0;i<3;shift++)
     {
      if (ZigZagBuffer[shift]>0)
        {
         i++;
         if (i==1 && ZigZagBuffer[shift]==High[shift])
           {
            j=shift;
            res=ZigZagBuffer[shift];
           }
         if (i==2 && res>0 && ZigZagBuffer[shift]==High[shift])
           {
            if (ZigZagBuffer[shift]>=ZigZagBuffer[j]) ZigZagBuffer[j]=0; else ZigZagBuffer[shift]=0;
            res=0;
            i=0;
            j=0;
            shift=0;
           }
        }
     }

   if

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

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

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

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

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

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

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