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

ZigZag Oscillator

zigzag_oscillator (mtf)(1).mq5
Вы автор или правообладатель?

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

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

О программе

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

Индикатор поддерживает многотаймфреймный режим, позволяя выбирать любой из стандартных таймфреймов (от M1 до MN) или более высокие таймфреймы. В этом режиме доступна интерполяция значений для более гладкого отображения.

Расчёт осциллятора основан на поиске экстремумов цены с заданными параметрами глубины и отклонения, после чего вычисляется процентное отклонение цены от последнего экстремума ZigZag. Результат представлен в виде четырёх цветных гистограмм.

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

НастройкаОписание
inpTimeFrame Таймфрейм, на котором выполняется расчёт индикатора. Поддерживаются стандартные таймфреймы от M1 до MN, а также более высокие таймфреймы.
Depth Минимальное количество баров между локальными экстремумами при построении ZigZag.
Deviation Допустимое отклонение в пунктах для подтверждения найденного экстремума цены.
Backstep Количество баров для обратного просмотра при корректировке найденных экстремумов ZigZag.
Limit_HistoBars Количество последних баров, используемых для расчёта гистограммы осциллятора.
Interpolate Включает интерполяцию значений индикатора между барами при работе в многотаймфреймном режиме.
Получить полный код

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

#property description "ZigZag Oscillator"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 clrLime
#property indicator_width1 3
#property indicator_color2 clrDarkGreen
#property indicator_width2 3
#property indicator_color3 clrRed
#property indicator_width3 3
#property indicator_color4 clrMaroon
#property indicator_width4 3
#property indicator_levelstyle STYLE_DOT
#property indicator_levelcolor clrWhite
#property indicator_levelwidth 1

enum enTimeFrames
{
         tf_cu  = 0,                                            // Current time frame
         tf_m1  = PERIOD_M1,                                    // 1 minute
         tf_m5  = PERIOD_M5,                                    // 5 minutes
         tf_m15 = PERIOD_M15,                                   // 15 minutes
         tf_m30 = PERIOD_M30,                                   // 30 minutes
         tf_h1  = PERIOD_H1,                                    // 1 hour
         tf_h4  = PERIOD_H4,                                    // 4 hours
         tf_d1  = PERIOD_D1,                                    // Daily
         tf_w1  = PERIOD_W1,                                    // Weekly
         tf_mn1 = PERIOD_MN1,                                   // Monthly
         tf_n1  = -1,                                           // First higher time frame
         tf_n2  = -2,                                           // Second higher time frame
         tf_n3  = -3                                            // Third higher time frame
      };
input enTimeFrames       inpTimeFrame    = tf_cu;              // Time frame to use 
extern int               Depth           = 12;
extern int               Deviation       = 5;
extern int               Backstep        = 3;
extern int               Limit_HistoBars = 400;
input bool               Interpolate     = true;               // Interpolated in mtf mode

double HH[],HL[],LL[],LH[],diff[],count[];
double ZZ[];
double HIGH[];
double LOW[];
int ExtLevel=3;
struct sGlobalStruct
{
   string indiFileName;
   int    indiTimeFrame;
};
sGlobalStruct glo;
#define _mtfCall(_buff,_ind) iCustom(_Symbol,glo.indiTimeFrame,glo.indiFileName,tf_cu,Depth,Deviation,Backstep,Limit_HistoBars,_buff,_ind)

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

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{
      // код доступен только после оплаты
   }
   int i,limit=fmin(rates_total-prev_calculated+1,rates_total-1); count[0] = limit;
      if (glo.indiTimeFrame!=_Period)
      {
         limit = (int)fmax(limit,fmin(rates_total-1,_mtfCall(8,0)*glo.indiTimeFrame/_Period));
         for(i=limit; i>=0 && !_StopFlag; i--)
         {
            int y = iBarShift(_Symbol,glo.indiTimeFrame,time[i]);
               HH[i]   = _mtfCall(0,y);
               HL[i]   = _mtfCall(1,y);
               LL[i]   = _mtfCall(2,y);
               LH[i]   = _mtfCall(3,y);
               diff[i] = _mtfCall(4,y);

               if (!Interpolate || (i>0 && y==iBarShift(_Symbol,glo.indiTimeFrame,time[i-1]))) continue;
                 #define _interpolate(buff) buff[i+k] = buff[i]+(buff[i+n]-buff[i])*k/n
                 int n,k; datetime btime = iTime(_Symbol,glo.indiTimeFrame,y);
                    for(n = 1; (i+n)<rates_total && time[i+n] >= btime; n++) continue;	
                    for(k = 1; k<n && (i+n)<rates_total && (i+k)<rates_total; k++) 
                    {
                       _interpolate(diff); 
                       if (HH[i]!=EMPTY_VALUE) HH[i+k]= _interpolate(diff);
                       if (HL[i]!=EMPTY_VALUE) HL[i+k]= _interpolate(diff);
                       if (LL[i]!=EMPTY_VALUE) LL[i+k]= _interpolate(diff);
                       if (LH[i]!=EMPTY_VALUE) LH[i+k]= _interpolate(diff);  
                    }                 
         }
   return(rates_total);
   }  

   int    counterZ,whatlookfor=0;
   int    back,pos,lasthighpos=0,lastlowpos=0;
   double extremum;
   double curlo

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

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

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

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

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

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

Стоимость полного кода
591,10₽ ≈ $7.22