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

Macd high/low multi time frame version

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

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

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

О программе

Индикатор «Macd high/low multi time frame version» для MetaTrader 5 рассчитывает MACD-подобное значение на основе экспоненциальных скользящих средних выбранной цены, а затем определяет верхний, нижний и средний уровни за настраиваемый период обзора. Дополнительно вычисляются «ранние» верхний и нижний уровни, задаваемые в процентах от размаха.

В многотаймфреймовом режиме индикатор отображает данные с более высокого таймфрейма на текущем графике. Для этого он внутренне вызывает сам себя через iCustom на выбранном таймфрейме, считывает рассчитанные буферы и при необходимости применяет интерполяцию для сглаживания переходов между барами.

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

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

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

НастройкаОписание
inpTimeFrame Таймфрейм, с которого берутся данные для расчёта индикатора. Доступны варианты от 1 минуты до месячного таймфрейма, а также ссылки на более высокие таймфреймы.
inpFastPeriod Период экспоненциальной скользящей средней для быстрого расчёта MACD-значения (первая EMA).
inpSlowPeriod Период экспоненциальной скользящей средней для медленного расчёта MACD-значения (вторая EMA).
inpSignalPeriod Период экспоненциальной скользящей средней для расчёта сигнальной линии на основе MACD-значений.
inpLookBackPeriod Количество баров, используемых для определения максимального и минимального значений MACD при расчёте верхнего, нижнего и среднего уровней.
inpEarlyLevel Процент, определяющий положение ранних верхнего и нижнего уровней относительно среднего уровня в процентах от размаха между максимальным и минимальным значениями за период обзора.
inpPrice Тип цены, используемой для расчёта: Close, Open, High, Low, Median, Typical или Weighted.
inpInterpolate Переключатель интерполяции значений при отображении данных с более высокого таймфрейма на текущем графике. При включении значения плавно пересчитываются между барами таймфрейма.
Получить полный код

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

???/*


*/

#property description "Macd high/low multi time frame version"

#property indicator_separate_window
#property indicator_height  120
#property indicator_buffers 10
#property indicator_plots   7

#property indicator_label1        "Level up"
#property indicator_type1   DRAW_LINE
#property indicator_color1  C'0,144,0'          //clrDodgerBlue
#property indicator_style1       STYLE_DOT      

#property indicator_label2       "Early level up"
#property indicator_type2   DRAW_LINE
#property indicator_color2  CLR_NONE            //clrDodgerBlue
#property indicator_style2  STYLE_DOT
#property indicator_label3       "Zero level"
#property indicator_type3   DRAW_LINE
#property indicator_color3  CLR_NONE            //clrDarkGray
#property indicator_style3  STYLE_DOT
#property indicator_label4       "Early level down"
#property indicator_type4   DRAW_LINE
#property indicator_color4  CLR_NONE            //clrCrimson
#property indicator_style4  STYLE_DOT

#property indicator_label5       "Level down"
#property indicator_type5   DRAW_LINE
#property indicator_color5  C'144,0,0'          //clrCrimson
#property indicator_style5       STYLE_DOT     

#property indicator_label6       "Macd value"
#property indicator_type6   DRAW_COLOR_ARROW    //DRAW_COLOR_LINE
#property indicator_color6  clrDimGray,C'0,255,0',C'0,123,0',C'123,0,0',C'255,0,0'  //clrDarkGray,clrDodgerBlue,clrDeepSkyBlue,clrCrimson,clrRed
#property indicator_width6  2

#property indicator_label7       "Macd signal"
#property indicator_type7   DRAW_NONE           //DRAW_COLOR_LINE
#property indicator_color7  clrDimGray,C'0,255,0',C'0,123,0',C'123,0,0',C'255,0,0'  //clrDarkGray,clrDodgerBlue,clrDeepSkyBlue,clrCrimson,clrRed
#property indicator_width7  1

enum enTimeFrames
  {
   tf_cu  = PERIOD_CURRENT, // Current time frame
   tf_m1  = PERIOD_M1,      // 1 minute
   tf_m2  = PERIOD_M2,      // 2 minutes
   tf_m3  = PERIOD_M3,      // 3 minutes
   tf_m4  = PERIOD_M4,      // 4 minutes
   tf_m5  = PERIOD_M5,      // 5 minutes
   tf_m6  = PERIOD_M6,      // 6 minutes
   tf_m10 = PERIOD_M10,     // 10 minutes
   tf_m12 = PERIOD_M12,     // 12 minutes
   tf_m15 = PERIOD_M15,     // 15 minutes
   tf_m20 = PERIOD_M20,     // 20 minutes
   tf_m30 = PERIOD_M30,     // 30 minutes
   tf_h1  = PERIOD_H1,      // 1 hour
   tf_h2  = PERIOD_H2,      // 2 hours
   tf_h3  = PERIOD_H3,      // 3 hours
   tf_h4  = PERIOD_H4,      // 4 hours
   tf_h6  = PERIOD_H6,      // 6 hours
   tf_h8  = PERIOD_H8,      // 8 hours
   tf_h12 = PERIOD_H12,     // 12 hours
   tf_d1  = PERIOD_D1,      // daily
   tf_w1  = PERIOD_W1,      // weekly
   tf_mn  = PERIOD_MN1,     // monthly
   tf_cp1 = -1,             // Next higher time frame
   tf_cp2 = -2,             // Second higher time frame
   tf_cp3 = -3              // Third higher time frame
  };
input enTimeFrames       inpTimeFrame      = tf_m15;           // Time frame
input int                inpFastPeriod     = 19;               // Fast DEMA period
input int                inpSlowPeriod     = 39;               // Slow DEMA period
input int                inpSignalPeriod   = 9;                // Signal period
input int                inpLookBackPeriod = 50;               // Lookback period
input double             inpEarlyLevel     = 25;               // Early levels %
input ENUM_APPLIED_PRICE inpPrice          = PRICE_CLOSE;      // Price 
input bool               inpInterpolate    = true;             // Interpolate in multi time frame mode?

double val[],valc[],signal[],signalc[],levelm[],levelu1[],levelu2[],leveld1[],leveld2[],count[];

int     _mtfHandle=INVALID_HANDLE; ENUM_TIMEFRAMES timeFrame;
#define _mtfCall iCustom(_Symbol,timeFrame,getIndicatorName(),0,inpFastPeriod,inpSlowPeriod,inpSignalPeriod,inpLookBackPeriod,inpEarlyLevel,inpPrice)

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

void OnDeinit(const int reason)
  {
  }

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[])
  {
      // код доступен только после оплаты
   }
   if(Bars(_Symbol,_Period)<rates_total) return(prev_calculated);
   if(timeFrame!=_Period)
     {
      double result[];
      if(BarsCalculated(_mtfHandle)<0)                     return(prev_calculated);
      if(!timeFrameCheck((ENUM_TIMEFRAMES)timeFrame,time)) return(prev_calculated);
      if(CopyBuffer(_mtfHandle,9,0,1,result)==-1)          return(prev_calculated);

      #define _mtfRatio PeriodSeconds((ENUM_TIMEFRAMES)timeFrame)/PeriodSeconds(_Period)
      int k,n,i=MathMin(MathMax(prev_calculated-1,0),MathMax(rates_total-(int)result[0]*_mtfRatio-1,0)),_prevMark=0,_seconds=PeriodSeconds(timeFrame);
      for(; i<rates_total && !_StopFlag; i++)
        {
         int _currMark = int(time[i]/_seconds);
         if (_currMark!=_prevMark)
         {

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

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

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

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

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

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

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