HMA Indicator For MT5
HMA Indicator For MT5 ni klasično drsno povprečje, ki ima vedno težave v izračunu v realnem času. S pomočjo drsečega povprečja trupa lahko najdete edinstveno HMA, pogosto znano kot drsno povprečje trupa, ki se zelo hitro odziva na gibanje cen. Ko cena trgovalnega instrumenta pade, se bo drseče povprečje odpravilo tudi na jug, kar potrjuje medvedji trend. Nasprotno, ko začne cena pridobivati bikovski zagon, se bo drseče povprečje začelo trgovati na severu. Če želite s pomočjo tega orodja maksimirati dejavnike dobička, ga uporabite v dnevnem časovnem okviru. Tisti, ki poznajo strategijo trgovanja z akcijskimi cenami, lahko tudi poiščejo signale akcijskih cen v Gibljivem povprečju trupa, da bi lahko sklenili svojo trgovino. Pazite, da med trgovanjem s tem kazalnikom nikoli ne uporabljate preveč tesnih zapor ali velike glasnosti.
Namestitev HMA Indicator For MT5
Ko naložite indikator prek zgornjega obrazca, morate odpreti zip datoteko. Nato morate kopirati datoteko HMA.mq5 v mapo MQL5Indicators vaše namestitve MT5 . Po tem znova zaženite MT5 in takrat boste lahko videli indikator na seznamu indikatorjev.
Parametri HMA Indicator For MT5
HMA Indicator For MT5 ima za nastavitev parametre 2 .
input uint InpPeriod = 20; // Period
input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_CLOSE; // Applied price
Odbojniki HMA Indicator For MT5
HMA Indicator For MT5 zagotavlja blažilnike 4 .
SetIndexBuffer(0,BufferHMA,INDICATOR_DATA);
SetIndexBuffer(1,BufferRAW,INDICATOR_CALCULATIONS);
SetIndexBuffer(2,BufferMAP,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,BufferMAL,INDICATOR_CALCULATIONS);
Glavni deli kodeksa
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[])
{
//--- @ gt 25@:0 =0 lt 8=8 lt 0;L= gt 5 : gt ;85AB2 gt 10@ gt 2 4;O @0AGQB0
if(rates_total lt period_ma) return 0;
//--- @ gt 25@:0 8 @0AGQB : gt ;8G5AB20 ?@ gt AG8BK205 lt KE 10@ gt 2
int limit=rates_total-prev_calculated;
if(limit gt 1)
{
limit=rates_total-period_ma-1;
ArrayInitialize(BufferHMA,EMPTY_VALUE);
ArrayInitialize(BufferRAW,0);
ArrayInitialize(BufferMAP,0);
ArrayInitialize(BufferMAL,0);
}
//--- gt 43 gt B gt 2:0 40==KE
int copied=0,count=(limit==0 ? 1 : rates_total);
copied=CopyBuffer(handle_maP,0,0,count,BufferMAP);
if(copied!=count) return 0;
copied=CopyBuffer(handle_maL,0,0,count,BufferMAL);
if(copied!=count) return 0;
for(int i=limit; i gt =0 && !IsStopped(); i--)
BufferRAW[i]=2*BufferMAL[i]-BufferMAP[i];
//--- 0AGQB 8=48:0B gt @0
for(int i=limit; i gt =0 && !IsStopped(); i--)
BufferHMA[i]=MAOnArray(BufferRAW,0,period_sqrt,0,MODE_LWMA,i);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| iMAOnArray() https://www.mql5.com/ru/articles/81 |
//+------------------------------------------------------------------+
double MAOnArray(double &array[],int total,int period,int ma_shift,int ma_method,int shift)
{
double buf[],arr[];
if(total==0) total=ArraySize(array);
if(total gt 0 && total lt =period) return(0);
if(shift gt total-period-ma_shift) return(0);
//---
switch(ma_method)
{
case MODE_SMA :
{
total=ArrayCopy(arr,array,0,shift+ma_shift,period);
if(ArrayResize(buf,total) lt 0) return(0);
double sum=0;
int i,pos=total-1;
for(i=1;i lt period;i++,pos--)
sum+=arr[pos];
while(pos gt =0)
{
sum+=arr[pos];
buf[pos]=sum/period;
sum-=arr[pos+period-1];
pos--;
}
return(buf[0]);
}
case MODE_EMA :
{
if(ArrayResize(buf,total) lt 0) return(0);
double pr=2.0/(period+1);
int pos=total-2;
while(pos gt =0)
{
if(pos==total-2) buf[pos+1]=array[pos+1];
buf[pos]=array[pos]*pr+buf[pos+1]*(1-pr);
pos--;
}
return(buf[shift+ma_shift]);
}
case MODE_SMMA :
{
if(ArrayResize(buf,total) lt 0) return(0);
double sum=0;
int i,k,pos;
pos=total-period;
while(pos gt =0)
{
if(pos==total-period)
{
for(i=0,k=pos;i lt period;i++,k++)
{
sum+=array[k];
buf[k]=0;
}
}
else sum=buf[pos+1]*(period-1)+array[pos];
buf[pos]=sum/period;
pos--;
}
return(buf[shift+ma_shift]);
}
case MODE_LWMA :
{
if(ArrayResize(buf,total) lt 0) return(0);
double sum=0.0,lsum=0.0;
double price;
int i,weight=0,pos=total-1;
for(i=1;i lt =period;i++,pos--)
{
price=array[pos];
sum+=price*i;
lsum+=price;
weight+=i;
}
pos++;
i=pos+period;
while(pos gt =0)
{
buf[pos]=sum/weight;
if(pos==0) break;
pos--;
i--;
price=array[pos];
sum=sum-lsum+price*period;
lsum-=array[i];
lsum+=price;
}
return(buf[shift+ma_shift]);
}
default: return(0);
}
return(0);
}
//+------------------------------------------------------------------+