4MA Candles Indicator For MT5
El 4MA Candles Indicator For MT5 analiza la apertura, alto, cierre y bajo de las velas para crear un nuevo conjunto de velas japonesas. Cuando el precio tiende más alto, el color de la vela es marrón. Por el contrario, cuando el precio tiende a bajar, el color de la vela es de color verde. Según el código de color de las velas, los comerciantes pueden encontrar fácilmente la dirección de la tendencia principal. Para ejecutar las operaciones, los operadores deben confiar en la imagen más amplia del mercado. Si utiliza la lectura de este indicador en el período de tiempo más bajo, hay muchas posibilidades de que no pueda obtener un beneficio decente de este mercado. Para mejorar su proceso de ejecución comercial, debe aprender a analizar los patrones de velas cuando el precio alcanza el nivel crítico de soporte y resistencia. En función de los niveles críticos, los operadores deben centrarse en el movimiento de precios a largo plazo para no tener que lidiar con los falsos picos.
Instalar la 4MA Candles Indicator For MT5
Después de descargar el indicador a través del formulario anterior, debe descomprimir el archivo zip. Luego, debe copiar el archivo 4_ma_candles.mq5 en la carpeta MQL5Indicators de su instalación MT5 . Después de eso, reinicie MT5 y luego podrá ver el indicador en la lista de indicadores.
Parámetros de la 4MA Candles Indicator For MT5
4MA Candles Indicator For MT5 tiene parámetros 2 para configurar.
input int AvgPeriod = 25; // Averages period
input enMaTypes AvgType = avgEma; // Averages method
Buffers of the 4MA Candles Indicator For MT5
4MA Candles Indicator For MT5 proporciona buffers 5 .
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);
Partes principales del código
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);
}