4MA Candles Indicator For MT5
4MA Candles Indicator For MT5 analyserer det åbne, høje, lukke og lave lys for at skabe et nyt sæt japansk lysestage. Når prisen er stigende, er farven på lysestagen brun. Tværtimod, når prisen er lavere, er farven på lysestagen farvet i grønt. Baseret på stearinlysens farvekode kan de erhvervsdrivende let finde retningen for den største tendens. For at gennemføre handlerne skal de erhvervsdrivende stole på det større billede af markedet. Hvis du bruger læsningen af denne indikator i den nedre tidsramme, er chancerne meget store for, at du ikke vil være i stand til at opnå et anstændigt overskud fra dette marked. For at forbedre din handelsudførelsesproces skal du lære at analysere lysestage-mønstre, når prisen rammer det kritiske support- og modstandsniveau. Baseret på de kritiske niveauer er de erhvervsdrivende nødt til at fokusere på den langsigtede prisbevægelse, så de ikke behøver at tackle de falske pigge.
Installation af 4MA Candles Indicator For MT5
Når du har hentet indikatoren via formularen ovenfor, skal du pakke zip-filen ud. Derefter skal du kopiere filen 4_ma_candles.mq5 til mappen MQL5Indicators for din MT5 installation. Efter dette skal du genstarte MT5, så vil du være i stand til at se indikatoren på listen over indikatorer.
Parametre for 4MA Candles Indicator For MT5
4MA Candles Indicator For MT5 har 2 parametre, der skal konfigureres.
input int AvgPeriod = 25; // Averages period
input enMaTypes AvgType = avgEma; // Averages method
Buffere af 4MA Candles Indicator For MT5
4MA Candles Indicator For MT5 leverer 5 buffere.
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);
Vigtigste dele af koden
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);
}