HMA Indicator For MT5
Ο HMA Indicator For MT5 δεν είναι σαν ένας κλασικός κινητός μέσος όρος που έχει πάντα προβλήματα υπολογισμού σε πραγματικό χρόνο. Με τη βοήθεια του κινούμενου μέσου του κύτους, μπορείτε να βρείτε ένα μοναδικό HMA που είναι συχνά γνωστός ως κινητός μέσος κύτος ανταποκρινόμενος στην κίνηση των τιμών με πολύ ακριβή τρόπο. Όταν η τιμή του μέσου διαπραγμάτευσης πέσει, ο κινούμενος μέσος όρος θα κατευθυνθεί επίσης προς το νότο επιβεβαιώνοντας την καθιέρωση της τάσης του bearish. Αντίθετα, όταν η τιμή αρχίζει να αποκτά ανοδική πορεία, ο κινητός μέσος όρος θα αρχίσει να διαπραγματεύεται στο βορρά. Για να μεγιστοποιήσετε τους συντελεστές κέρδους χρησιμοποιώντας αυτό το εργαλείο, θα πρέπει να το χρησιμοποιήσετε στο ημερήσιο χρονικό πλαίσιο. Εκείνοι που γνωρίζουν τη στρατηγική διαπραγμάτευσης των τιμών, μπορούν επίσης να αναζητήσουν τα σήματα ενεργειών για τις τιμές στο Moving Average Hull για να τοποθετήσουν το εμπόριο τους. Βεβαιωθείτε όμως ότι ποτέ δεν χρησιμοποιείτε πολύ σφιχτές στάσεις ή μεγάλη ένταση κατά την εμπορία της αγοράς με αυτόν τον δείκτη.
Εγκατάσταση του HMA Indicator For MT5
Αφού κατεβάσετε την ένδειξη μέσω της παραπάνω φόρμας, πρέπει να αποσυνδέσετε το αρχείο zip. Στη συνέχεια, πρέπει να αντιγράψετε το αρχείο HMA.mq5 στο φάκελο MQL5Indicators της εγκατάστασης MT5 . Στη συνέχεια, κάντε επανεκκίνηση του MT5 και, στη συνέχεια, θα μπορείτε να δείτε τον δείκτη στη λίστα των δεικτών.
Παράμετροι του HMA Indicator For MT5
Το HMA Indicator For MT5 έχει παραμέτρους 2 για να ρυθμίσετε τις παραμέτρους.
input uint InpPeriod = 20; // Period
input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_CLOSE; // Applied price
Buffers του HMA Indicator For MT5
Το HMA Indicator For MT5 παρέχει buffers 4 .
SetIndexBuffer(0,BufferHMA,INDICATOR_DATA);
SetIndexBuffer(1,BufferRAW,INDICATOR_CALCULATIONS);
SetIndexBuffer(2,BufferMAP,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,BufferMAL,INDICATOR_CALCULATIONS);
Κύρια μέρη του κώδικα
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);
}
//+------------------------------------------------------------------+