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

phase_accumulation_macd_2_1_floating_levels.mq5

Похожие материалы по тегам

pro +.pineTradingView · 2 общих теговofada_gold_trader_v230.mq5MQL5 / MetaTrader 5 · 2 общих теговmulti strategy algo combined by enigma mode.pineTradingView · 2 общих теговmacd-osma-on-chart-mtf-v2.mq5MQL5 / MetaTrader 5 · 2 общих теговmelona ob strategy 6th update (by 3dots).pineTradingView · 2 общих теговlondon breakout 1.00@lifeindreamsworld.mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

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

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

Поддерживается выбор различных типов цен, включая стандартные OHLC, медианные, типичные, взвешенные, а также цены Хейкин Аши. Доступна работа на разных таймфреймах с возможностью интерполяции значений между барами.

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

НастройкаОписание
TimeFrame Временной интервал для расчёта индикатора.
ForSymbol Символ инструмента для расчёта индикатора. Пустая строка означает текущий символ графика.
price Тип цены, используемый для расчёта индикатора.
filter Параметр фильтра сглаживания, влияющий на адаптивный период преобразования Гильберта.
cyclesFast Количество циклов для расчёта адаптивного периода быстрой экспоненциальной средней.
cyclesSlow Количество циклов для расчёта адаптивного периода медленной экспоненциальной средней.
inverted Переключатель инверсии направления MACD: при включении медленная EMA вычитается из быстрой.
MinMaxPeriod Количество баров для определения минимума и максимума MACD при расчёте плавающих уровней.
LevelUp Процентиль верхнего уровня от диапазона MACD за период MinMaxPeriod.
LevelDown Процентиль нижнего уровня от диапазона MACD за период MinMaxPeriod.
Interpolate Переключатель интерполяции значений между барами при работе на мультитаймфрейме.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1  clrSandyBrown
#property indicator_color2  clrSandyBrown
#property indicator_color3  clrDeepSkyBlue
#property indicator_color4  clrDeepSkyBlue
#property indicator_color5  clrDimGray
#property indicator_color6  clrDeepSkyBlue
#property indicator_color7  clrDimGray
#property indicator_color8  clrSandyBrown
#property indicator_width1  1
#property indicator_width2  2
#property indicator_width3  1
#property indicator_width4  2
#property indicator_width5  2
#property indicator_style6  STYLE_DOT
#property indicator_style7  STYLE_DOT
#property indicator_style8  STYLE_DOT
#property indicator_level1  0

enum enPrices
{
   pr_close,      // Close
   pr_open,       // Open
   pr_high,       // High
   pr_low,        // Low
   pr_median,     // Median
   pr_typical,    // Typical
   pr_weighted,   // Weighted
   pr_average,    // Average (high+low+open+close)/4
   pr_medianb,    // Average median body (open+close)/2
   pr_tbiased,    // Trend biased price
   pr_haclose,    // Heiken ashi close
   pr_haopen ,    // Heiken ashi open
   pr_hahigh,     // Heiken ashi high
   pr_halow,      // Heiken ashi low
   pr_hamedian,   // Heiken ashi median
   pr_hatypical,  // Heiken ashi typical
   pr_haweighted, // Heiken ashi weighted
   pr_haaverage,  // Heiken ashi average
   pr_hamedianb,  // Heiken ashi median body
   pr_hatbiased   // Heiken ashi trend biased price
};

extern ENUM_TIMEFRAMES    TimeFrame    = PERIOD_CURRENT;
extern string             ForSymbol    = "";
extern enPrices           price        = pr_median;
extern double             filter       = 1;
extern double             cyclesFast   = 0.5;
extern double             cyclesSlow   = 1.0;
extern bool               inverted     = false;
extern int                MinMaxPeriod =  50;
extern double             LevelUp      =  90;
extern double             LevelDown    =  10;
extern bool               Interpolate  = true;

double macd[];
double macdhUpa[];
double macdhUpb[];
double macdhDna[];
double macdhDnb[];
double levelUp[];
double levelMi[];
double levelDn[];
double emaFast[];
double emaSlow[];
double trend[];
string indicatorFileName;
bool   returnBars;

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

int start()
{
      // код доступен только после оплаты
   }
   int i,limit,counted_bars=IndicatorCounted();

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);
         if (returnBars) { macdhDna[0] = limit+1; return(0); }

   if (ForSymbol == Symbol() && TimeFrame == Period())
   {
      for(i=limit; i>=0; i--)
      {
         double prc = getPrice(price,Open,Close,High,Low,i);
         if (i==Bars-1)
         {
            emaFast[i] = prc;
            emaSlow[i] = prc;
            continue;
         }

      double alphaFast = 2.0/(1.0+iHilbertPhase(prc,filter,cyclesFast,i,0));
      double alphaSlow = 2.0/(1.0+iHilbertPhase(prc,filter,cyclesSlow,i,1));

         emaFast[i]  = emaFast[i+1]+alphaFast*(prc-emaFast[i+1]);
         emaSlow[i]  = emaSlow[i+1]+alphaSlow*(prc-emaSlow[i+1]);
         if (inverted)
               macd[i] = emaSlow[i]-emaFast[i];
         else  macd[i] = emaFast[i]-emaSlow[i];
         macdhDna[i] = EMPTY_VALUE;
         macdhDnb[i] = EMPTY_VALUE;
         macdhUpa[i] = EMPTY_VALUE;
         macdhUpb[i] = EMPTY_VALUE;

            trend[i] = trend[i+1];
               if (macd[i]>macd[i+1]) trend[i] =  1;
               if (macd[i]<macd[i+1]) trend[i] = -1;
               if (macd[i]>0)
                  if (trend[i] == 1) 
                        macdhUpb[i] = macd[i];
                  else  macdhUpa[i] = macd[i];
               if (macd[i]<0)
                  if (trend[i] == -1) 
                        macdhDnb[i] = macd[i];
                  else  macdhDna[i] = macd[i];

                  double valMin = macd[ArrayMinimum(macd,MinMaxPeriod,i)];
                  double valMax = macd[ArrayMaximum(macd,MinMaxPeriod,i)];
                  double range  = valMax-valMin;
                     levelUp[i] = valMin+range*LevelUp/100.0;
                     levelMi[i] = valMin+range*0.5;
                     levelDn[i] = valMin+range*LevelDown/100.0;
      }
      return (0);
   }

   limit = MathMax(limit,MathMin(Bars-1,iCustom(ForSymbol,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/Period()));
   for (i=limit; i>=0; i--)
   {
      int y = iBarShift(ForSymbol,TimeFrame,Time[i]);
         macdhDna[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,0,y);
         macdhDnb[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,1,y);
         macdhUpa[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,2,y);
         macdhUpb[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,3,y);
         macd[i]     = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,4,y);
         levelUp[i]  = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,5,y);
         levelMi[i]  = iCustom(ForSymbol,TimeFrame,

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

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

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

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

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

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

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