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

ARRZZX2

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

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

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

О программе

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

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

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

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

НастройкаОписание
SR Период сглаживания — Период сглаживания вспомогательной скользящей средней, используемой в расчётах
DrawZZ Рисовать зигзаг — Переключатель отображения линии зигзага на графике
Indicator_On Индикатор включён — Переключатель активности индикатора; при выключении индикатор деинициализируется
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 8
extern int SR=3,SRZZ=12,MainRZZ=34,FP=21,SMF=3,PriceConst=0;
extern bool DrawZZ=FALSE;
double Lmt[],LZZ[],SA[],SM[],Up[],Dn[],pUp[],pDn[];
int LTF[6]= {0,0,0,0,0,0},STF[5]= {0,0,0,0,0};
int MaxBar,nSBZZ,nLBZZ,SBZZ,LBZZ,prevBars=0;
bool First=true;
extern bool Indicator_On=true;
bool Deinitialized;
int ChartScale,Width;

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

int deinit() {return(0);}

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

void MainCalculation(int Pos)
  {
   if((Bars-Pos)>(SR+1))
      SACalc(Pos);
   else
      SA[Pos]=0;
   if((Bars-Pos)>(FP+SR+2))
      SMCalc(Pos);
   else
      SM[Pos]=0;
   return;
  }

void SACalc(int Pos)
  {
   int sw,i,w,ww,Shift;
   double sum;
   switch(PriceConst)
     {
      case 0:
         SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_CLOSE,Pos);
         break;
      case 1:
         SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_OPEN,Pos);
         break;
      /* case 2: SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_HIGH,Pos);     break;
         case 3: SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_LOW,Pos);      break;*/
      case 4:
         SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_MEDIAN,Pos);
         break;
      case 5:
         SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_TYPICAL,Pos);
         break;
      case 6:
         SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_WEIGHTED,Pos);
         break;
      default:
         SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_OPEN,Pos);
         break;
     }

   for(Shift=Pos+SR+2; Shift>Pos; Shift--)
     {
      sum=0.0;
      sw=0;
      i=0;
      w=Shift+SR;
      ww=Shift-SR;
      if(ww<Pos)
         ww=Pos;
      while(w>=Shift)
        {
         i++;
         sum=sum+i*SnakePrice(w);
         sw=sw+i;
         w--;
        }
      while(w>=ww)
        {
         i--;
         sum=sum+i*SnakePrice(w);
         sw=sw+i;
         w--;
        }
      SA[Shift]=sum/sw;
     }
   return;
  }

double SnakePrice(int Shift)
  {
   switch(PriceConst)
     {
      case 0:
         return(Close[Shift]);
      case 1:
         return(Open[Shift]);
      /* case 2: return(High[Shift]);
         case 3: return(Low[Shift]);*/
      case 4:
         return((High[Shift]+Low[Shift])/2);
      case 5:
         return((Close[Shift]+High[Shift]+Low[Shift])/3);
      case 6:
         return((2*Close[Shift]+High[Shift]+Low[Shift])/4);
      default:
         return(Open[Shift]);
     }
  }

void SMCalc(int i)
  {
   double t,b;
   for(int Shift=i+SR+2; Shift>=i; Shift--)
     {
      t=SA[ArrayMaximum(SA,FP,Shift)];
      b=SA[ArrayMinimum(SA,FP,Shift)];
      SM[Shift]=(2*(2+SMF)*SA[Shift]-(t+b))/2/(1+SMF);
     }
   return;
  }

void LZZCalc(int Pos)
  {
   int i,RBar,LBar,ZZ,NZZ,NZig,NZag;
   i=Pos-1;
   NZig=0;
   NZag=0;
   while(i<MaxBar && ZZ==0)
     {
      i++;
      LZZ[i]=0;
      RBar=i-MainRZZ;
      if(RBar<Pos)
         RBar=Pos;
      LBar=i+MainRZZ;
      if(i==ArrayMinimum(SM,LBar-RBar+1,RBar))
        {
         ZZ=-1;
         NZig=i;
        }
      if(i==ArrayMaximum(SM,LBar-RBar+1,RBar))
        {
         ZZ=1;
         NZag=i;
        }
     }
   if(ZZ==0)
      return;
   NZZ=0;
   if(i>Pos)
     {
      if(SM[i]>SM[Pos])
        {
     

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

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

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

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

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

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

Стоимость полного кода
648,80₽ ≈ $7.93