4MA Candles Indicator For MT5
Der 4MA Candles Indicator For MT5 analysiert das Öffnen, Hoch, Schließen und Tief der Kerzen, um einen neuen Satz japanischer Kerzenhalter zu erstellen. Wenn der Preis tendenziell höher ist, ist die Farbe des Kerzenhalters braun. Im Gegenteil, wenn der Preis niedriger ist, ist die Farbe des Kerzenhalters grün gefärbt. Anhand des Farbcodes der Kerzen können die Händler leicht die Richtung des Haupttrends ermitteln. Um die Trades ausführen zu können, müssen sich die Trader auf das Gesamtbild des Marktes verlassen. Wenn Sie den Wert dieses Indikators im unteren Zeitrahmen verwenden, ist die Wahrscheinlichkeit sehr hoch, dass Sie mit diesem Markt keinen angemessenen Gewinn erzielen können. Um Ihren Trade Execution-Prozess zu verbessern, müssen Sie lernen, die Candlestick-Muster zu analysieren, wenn der Preis das kritische Unterstützungs- und Widerstandsniveau erreicht. Basierend auf den kritischen Niveaus müssen sich die Händler auf die langfristige Preisbewegung konzentrieren, damit sie nicht mit den falschen Spitzen umgehen müssen.
Installation des 4MA Candles Indicator For MT5
Nachdem Sie den Indikator über das obige Formular heruntergeladen haben, müssen Sie die Zip-Datei entpacken. Anschließend müssen Sie die Datei 4_ma_candles.mq5 in den Ordner MQL5Indicators Ihrer MT5 Installation kopieren. Starten Sie danach MT5 neu und Sie können den Indikator in der Liste der Indikatoren sehen.
Parameter des 4MA Candles Indicator For MT5
Der 4MA Candles Indicator For MT5 verfügt über 2 zu konfigurierende Parameter.
input int AvgPeriod = 25; // Averages period
input enMaTypes AvgType = avgEma; // Averages method
Puffer des 4MA Candles Indicator For MT5
Der 4MA Candles Indicator For MT5 stellt 5 Puffer bereit.
SetIndexBuffer(0,cano ,INDICATOR_DATA);
SetIndexBuffer(1,canh ,INDICATOR_DATA);
SetIndexBuffer(2,canl ,INDICATOR_DATA);
SetIndexBuffer(3,canc ,INDICATOR_DATA);
SetIndexBuffer(4,colors,INDICATOR_COLOR_INDEX);
Hauptteile des Codes
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 bars = Bars(_Symbol,_Period); if (bars lt rates_total) return(-1);
for (int i=(int)MathMax(prev_calculated-1,0); i lt rates_total && !IsStopped(); i++)
{
double mao = iCustomMa(AvgType,open[i] ,AvgPeriod,i,rates_total,0);
double mac = iCustomMa(AvgType,close[i],AvgPeriod,i,rates_total,1);
double mah = iCustomMa(AvgType,high[i] ,AvgPeriod,i,rates_total,2);
double mal = iCustomMa(AvgType,low[i] ,AvgPeriod,i,rates_total,3);
canh[i] = MathMax(MathMax(MathMax(mao,mac),mal),mah);
canl[i] = MathMin(MathMin(MathMin(mao,mac),mal),mah);
cano[i] = mao;
canc[i] = mac;
colors[i] = mao gt mac ? 2 : mao lt mac ? 1 : 0;
}
return(rates_total);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
#define _maInstances 4
#define _maWorkBufferx1 1*_maInstances
#define _maWorkBufferx2 2*_maInstances
double iCustomMa(int mode, double price, double length, int r, int bars, int instanceNo=0)
{
switch (mode)
{
case avgSma : return(iSma(price,(int)length,r,bars,instanceNo));
case avgEma : return(iEma(price,length,r,bars,instanceNo));
case avgSmma : return(iSmma(price,(int)length,r,bars,instanceNo));
case avgLwma : return(iLwma(price,(int)length,r,bars,instanceNo));
default : return(price);
}
}
//
//
//
//
//
double workSma[][_maWorkBufferx2];
double iSma(double price, int period, int r, int _bars, int instanceNo=0)
{
if (period lt =1) return(price);
if (ArrayRange(workSma,0)!= _bars) ArrayResize(workSma,_bars); instanceNo *= 2; int k;
//
//
//
//
//
workSma[r][instanceNo+0] = price;
workSma[r][instanceNo+1] = price; for(k=1; k lt period && (r-k) gt =0; k++) workSma[r][instanceNo+1] += workSma[r-k][instanceNo+0];
workSma[r][instanceNo+1] /= 1.0*k;
return(workSma[r][instanceNo+1]);
}
//
//
//
//
//
double workEma[][_maWorkBufferx1];
double iEma(double price, double period, int r, int _bars, int instanceNo=0)
{
if (period lt =1) return(price);
if (ArrayRange(workEma,0)!= _bars) ArrayResize(workEma,_bars);
//
//
//
//
//
workEma[r][instanceNo] = price;
double alpha = 2.0 / (1.0+period);
if (r gt 0)
workEma[r][instanceNo] = workEma[r-1][instanceNo]+alpha*(price-workEma[r-1][instanceNo]);
return(workEma[r][instanceNo]);
}
//
//
//
//
//
double workSmma[][_maWorkBufferx1];
double iSmma(double price, double period, int r, int _bars, int instanceNo=0)
{
if (period lt =1) return(price);
if (ArrayRange(workSmma,0)!= _bars) ArrayResize(workSmma,_bars);
//
//
//
//
//
if (r lt period)
workSmma[r][instanceNo] = price;
else workSmma[r][instanceNo] = workSmma[r-1][instanceNo]+(price-workSmma[r-1][instanceNo])/period;
return(workSmma[r][instanceNo]);
}
//
//
//
//
//
double workLwma[][_maWorkBufferx1];
double iLwma(double price, double period, int r, int _bars, int instanceNo=0)
{
if (period lt =1) return(price);
if (ArrayRange(workLwma,0)!= _bars) ArrayResize(workLwma,_bars);
//
//
//
//
//
workLwma[r][instanceNo] = price;
double sumw = period;
double sum = period*price;
for(int k=1; k lt period && (r-k) gt =0; k++)
{
double weight = period-k;
sumw += weight;
sum += weight*workLwma[r-k][instanceNo];
}
return(sum/sumw);
}