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

allclusterfilter_v1.1 600+.mq5

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

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

AllClusterFilter — индикатор для MetaTrader 4, который рассчитывает фильтр кластеров на основе двух скользящих средних, выбранных пользователем из обширного списка методов (SMA, EMA, HMA, ALMA, T3, Laguerre и более 30 вариантов). Входные данные могут задаваться через различные типы цен, включая Heikin Ashi. Индикатор отображает три буфера на графике: основной линией фильтра и двумя линиями для визуализации тренда при включённом цветовом режиме.

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

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

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

НастройкаОписание
TimeFrame (TimeFrame) TimeFrame — Таймфрейм для расчёта индикатора.
Price (Price) Price — Тип цены для расчёта (Close, Open, High, Low, Heikin Ashi и другие).
First MA Period (FirstMALength) FirstMALength — Период первой скользящей средней.
First MA Method (FirstMAMode) FirstMAMode — Метод расчёта первой скользящей средней (SMA, EMA, HMA, ALMA и другие).
Second MA Period (SecondMALength) SecondMALength — Период второй скользящей средней.
Second MA Method (SecondMAMode) SecondMAMode — Метод расчёта второй скользящей средней (SMA, EMA, HMA, ALMA и другие).
Show In Color (ShowInColor) ShowInColor — Включает отображение трендовых линий в цветовом режиме.
Number of bars counted: 0-all bars (CountBars) CountBars — Количество анализируемых баров. Значение 0 означает все бары.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1  clrTomato
#property indicator_width1  2  
#property indicator_color2  clrDeepSkyBlue
#property indicator_width2  2  
#property indicator_color3  clrDeepSkyBlue
#property indicator_width3  2  

enum ENUM_MA_MODE
{
   SMA,                 // Simple Moving Average
   EMA,                 // Exponential Moving Average
   Wilder,              // Wilder Exponential Moving Average
   LWMA,                // Linear Weighted Moving Average
   SineWMA,             // Sine Weighted Moving Average
   TriMA,               // Triangular Moving Average
   LSMA,                // Least Square Moving Average (or EPMA, Linear Regression Line)
   SMMA,                // Smoothed Moving Average
   HMA,                 // Hull Moving Average by A.Hull
   ZeroLagEMA,          // Zero-Lag Exponential Moving Average
   DEMA,                // Double Exponential Moving Average by P.Mulloy
   T3_basic,            // T3 by T.Tillson (original version)
   ITrend,              // Instantaneous Trendline by J.Ehlers
   Median,              // Moving Median
   GeoMean,             // Geometric Mean
   REMA,                // Regularized EMA by C.Satchwell
   ILRS,                // Integral of Linear Regression Slope
   IE_2,                // Combination of LSMA and ILRS
   TriMAgen,            // Triangular Moving Average generalized by J.Ehlers
   VWMA,                // Volume Weighted Moving Average
   JSmooth,             // M.Jurik's Smoothing
   SMA_eq,              // Simplified SMA
   ALMA,                // Arnaud Legoux Moving Average
   TEMA,                // Triple Exponential Moving Average by P.Mulloy
   T3,                  // T3 by T.Tillson (correct version)
   Laguerre,            // Laguerre filter by J.Ehlers
   MD,                  // McGinley Dynamic
   BF2P,                // Two-pole modified Butterworth filter by J.Ehlers
   BF3P,                // Three-pole modified Butterworth filter by J.Ehlers
   SuperSmu,            // SuperSmoother by J.Ehlers
   Decycler,            // Simple Decycler by J.Ehlers
   eVWMA                // Modified eVWMA
};   

enum ENUM_PRICE
{
   close,               // Close
   open,                // Open
   high,                // High
   low,                 // Low
   median,              // Median
   typical,             // Typical
   weightedClose,       // Weighted Close
   medianBody,          // Median Body (Open+Close)/2
   average,             // Average (High+Low+Open+Close)/4
   trendBiased,         // Trend Biased
   haClose,             // Heiken Ashi Close
   haOpen,              // Heiken Ashi Open
   haHigh,              // Heiken Ashi High   
   haLow,               // Heiken Ashi Low
   haMedian,            // Heiken Ashi Median
   haTypical,           // Heiken Ashi Typical
   haWeighted,          // Heiken Ashi Weighted Close
   haMedianBody,        // Heiken Ashi Median Body
   haAverage,           // Heiken Ashi Average
   haTrendBiased        // Heiken Ashi Trend Biased   
};

#define pi 3.14159265358979323846

input ENUM_TIMEFRAMES   TimeFrame               =        0;       // TimeFrame
input ENUM_PRICE        Price                   =        0;       // Price
input int               FirstMALength           =        2;       // First MA Period 
input ENUM_MA_MODE      FirstMAMode             =        1;       // First MA Method
input int               SecondMALength          =        2;       // Second MA Period  
input ENUM_MA_MODE      SecondMAMode            =        0;       // Second MA Method
input bool              ShowInColor             =     true;       // Show In Color
input int               CountBars               =        0;       // Number of bars counted: 0-all bars 

double cluster[];
double uptrend1[];
double uptrend2[];
double iprice[];
double firstMA[];
double secondMA[];
double trend[];

int      timeframe, sumlength, cBars, draw_begin, firstsize, secondsize;
string   IndicatorName, TF, short_name;

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

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

void clusterFilter(double& firstma[],double& secondma[],int cbars,int bar)
{
   if(bar == cbars) cluster[bar] = firstma[bar];
   else
   {
      if(cluster[bar+1] > cluster[bar+2])
      {
         if(cluster[bar+1] < firstma[bar] && cluster[bar+1] < secondma[bar])
         {
         cluster[bar] = fmin(firstma[bar],secondma[bar]);
         return;
         }

         if(cluster[bar+1] < firstma[bar] && cluster[bar+1] > secondma[bar])
         {
         cluster[bar] = firstma[bar];
         return;
         }

         if(cluster[bar+1] > firstma[bar] && cluster[bar+1] < secondma[bar])
         {
         cluster[bar] = secondma[bar];
         return;
         }

      cluster[bar] = fmax(firstma[bar],secondma[bar]);
      }
      else
      {
         if(cluster[bar+1] > firstma[bar] && cluster[bar+1] > secondma[bar])
         {
         cluster[bar] = fmax(firstma[bar],secondma[bar]);
         return;
         }

         if(cluster[bar+1] > firstma[bar] && cluster[bar+1] < secondma[bar])
         {
         cluster[bar] = firstma[bar];
         return;
         }

         if(cluster[bar+1] < firstma[bar] && cluster[bar+1] > secondma[bar])
         {
         cluster[bar] = secondma[bar];
         return;
         }

      cluster[bar] = fmin(firstma[bar],secondma[bar]);
      }
   }
}

int averageSize(int mode)
{   
   int arraysize;

   switch(mode)
   {
   case DEMA     : arraysize = 2; break;
   case T3_basic : arraysize = 6; break;
   case JSmooth  : arraysize = 5; break;
   case TEMA     : arraysize = 4; break;
   case T3       : arraysize = 6; break;
   case Laguerre : arraysize = 4; break;
   default       : arraysize = 0; break;
   }

   return(arraysize);
}

double   tmp[][2][2], ma[2][4];
datetime prevtime[2];  

double allAveragesOnArray(int index,double& price[],int period,int mode,int arraysize,int cbars,int bar)
{
   if(period == 1) return(price[bar]);

   int i;
   double MA[4];  

   switch(mode) 
	{
	case EMA: case Wilder: case SMMA: case ZeroLagEMA: case DEMA: case T3_basic: case ITrend: case REMA: case JSmooth: case SMA_eq: case TEMA: case T3: case Laguerre: case MD: case BF2P: case BF3P: case SuperSmu: case Decycler: case eVWMA:

		if(prevtime[index] != Time[bar])
      {
      ma[index][3] = ma[index][2]; 
      ma[index][2] = ma[index][1]; 
      ma[index][1] = ma[index][0]; 

      if(arraysize > 0) for(i=0;i<arraysize;i++) tmp[i][index][1] = tmp[i][index][0];

      prevtime[index] = Time[bar]; 
      }

      if(mode == ITrend || mode == REMA || mode == SMA_eq || (mode >= BF2P && mode < eVWMA)) for(i=0;i<4;i++) MA[i] = ma[index][i]; 
	}

   switch(mode)
   {
   case EMA       : ma[index][0] = EMAOnArray(price[bar],ma[index][1],period,cbars,bar); break;
   case Wilder    : ma[index][0] = WilderOnArray(price[bar],ma[index][1],period,cbars,bar); break;  
   case LWMA      : ma[index][0] = LWMAOnArray(price,period,bar); break;
   case SineWMA   : ma[index][0] = SineWMAOnArray(price,period,bar); break;
   case TriMA     : ma[index][0] = TriMAOnArray(price,period,bar); break;
   case LSMA      : ma[index][0] = LSMAOnArray(price,period,bar); break;
   case SMMA      : ma[index][0] = SMMAOnArray(price,ma[index][1],period,cbars,bar); break;
   case HMA       : ma[index][0] = HMAOnArray(price,period,cbars,bar); break;
   case ZeroLagEMA: ma[index][0] = ZeroLagEMAOnArray(price,ma[index][1],period,cbars,bar); break;
   case DEMA      : ma[index][0] = DEMAOnArray(index,0,price[bar],period,1,cbars,bar); break;
   case T3_basic  : ma[index][0] = T3_basicOnArray(index,0,price[bar],period,0.7,cbars,bar); break;
   case ITrend    : ma[index][0] = ITrendOnArray(price,MA,period,cbars,bar); break;
   case Median    : ma[index][0] = MedianOnArray(price,period,cbars,bar); break;
   case GeoMean   : ma[index][0] = GeoMeanOnArray(price,period,cbars,bar); break;
   case REMA      : ma[index][0] = REMAOnArray(price[bar],MA,period,0.5,cbars,bar); break;
   case ILRS      : ma[index][0] = ILRSOnArray(price,period,cbars,bar); break;
   case IE_2      : ma[index][0] = IE2OnArray(price,period,cbars,bar); break;
   case TriMAgen  : ma[index][0] = TriMA_genOnArray(price,period,cbars,bar); break;
   case VWMA      : ma[index][0] = VWMAOnArray(price,period,bar); break;
   case JSmooth   : ma[index][0] = JSmoothOnArray(index,0,price[bar],period,1,cbars,bar); break;
   case SMA_eq    : ma[index][0] = SMA_eqOnArray(price,MA,period,cbars,bar); break;
   case ALMA      : ma[index][0] = ALMAOnArray(price,period,0.85,8,bar); break;
   case TEMA      : ma[index][0] = TEMAOnArray(index,price[bar],period,1,cbars,bar); break;
   case T3        : ma[index][0] = T3OnArray(index,0,price[bar],period,0.7,cbars,bar); break;
   case Laguerre  : ma[index][0] = LaguerreOnArray(index,price[bar],period,4,cbars,bar); break;
   case MD        : ma[index][0] = McGinleyOnArray(price[bar],ma[index][1],period,cbars,bar); break;
   case BF2P      : ma[index][0] = BF2POnArray(price,MA,period,cbars,bar); break;
   case BF3P      : ma[index][0] = BF3POnArray(price,MA,period,cbars,bar); break;
   case SuperSmu  : ma[index][0] = SuperSmuOnArray(price,MA,period,cbars,bar); break;
   case Decycler  : ma[index][0] = DecyclerOnArray(price,MA,period,cbars,bar); return(price[bar] - ma[index][0]); 
   case eVWMA     : ma[index][0] = eVWMAOnArray(price[bar],ma[index][1],period,cbars,bar); break;
   default        : ma[index][0] = SMAOnArray(price,period,bar); break;
   }

   return(ma[index][0]);
}

double SMAOnArray(double& array[],int per,int bar)
{
   double sum = 0;
   for(int i=0;i<per;i++) sum += array[bar+i];

   return(sum/per);
}                

double EMAOnArray(double price,double prev,int per,int cbars,int bar)
{
   double ema;

   if(bar >= cbars) ema = price;
   else 
   ema = prev + 2.0/(1 + per)*(price - prev); 

   return(ema);
}

double WilderOnArray(double price,double prev,int per,int cbars,int bar)
{
   double wilder;

   if(bar >= cbars) wilder = price; 
   else 
   wilder = prev + (price - prev)/per; 

   return(wilder);
}

double LWMAOnArray(double& array[],int per,int bar)
{
   double sum = 0, weight = 0;

      for(int i=0;i<per;i++)
      { 
      weight += (per - i);
      sum    += array[bar+i]*(

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

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

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

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

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

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

Стоимость полного кода
2 233,20₽ ≈ $27.29