allclusterfilter_v1.1 600+.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «allclusterfilter_v1.1 600+.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.