HMA Indicator For MT5

HMA Indicator For MT5

HMA Indicator For MT5 nie jest klasyczną średnią ruchomą, która zawsze ma problemy z obliczeniami w czasie rzeczywistym. Za pomocą średniej ruchomej kadłuba można znaleźć unikalną HMA często znaną jako średnia ruchoma kadłuba reagująca na ruch cenowy w bardzo precyzyjny sposób. Gdy cena instrumentu handlowego spadnie, średnia ruchoma zmierza również na południe, potwierdzając ustanowienie trendu spadkowego. Przeciwnie, gdy cena zacznie nabierać rozpędu, średnia ruchoma zacznie handlować na północy. Aby zmaksymalizować współczynniki zysku za pomocą tego narzędzia, należy go używać w ramach dziennych. Ci, którzy znają strategię handlu akcjami cenowymi, mogą również szukać sygnałów akcji cenowych w średniej ruchomej kadłuba, aby umieścić swoją transakcję. Ale upewnij się, że nigdy nie używasz zbyt ciasnych przystanków lub dużego wolumenu podczas handlu rynkiem z tym wskaźnikiem.

FREE HMA Indicator

Download the FREE HMA Indicator for MT5.

To receive my email 100% sure: 
Put my email on your whitelist!

 

Partially Automated Trading Besides Your Day Job

Alerts In Real-Time When Divergences Occur

 

Instalowanie HMA Indicator For MT5

Po pobraniu wskaźnika za pomocą powyższego formularza musisz rozpakować plik zip. Następnie musisz skopiować plik HMA.mq5 do folderu MQL5Indicators instalacji MT5 . Następnie uruchom ponownie MT5, a wtedy będziesz mógł zobaczyć wskaźnik na liście wskaźników.

Parametry HMA Indicator For MT5

HMA Indicator For MT5 2 HMA Indicator For MT5 ma parametry 2 do skonfigurowania.

input uint                 InpPeriod         =  20;            // Period
input ENUM_APPLIED_PRICE   InpAppliedPrice   =  PRICE_CLOSE;   // Applied price

Bufory słowa HMA Indicator For MT5

HMA Indicator For MT5 zapewnia bufory 4 .

SetIndexBuffer(0,BufferHMA,INDICATOR_DATA);
SetIndexBuffer(1,BufferRAW,INDICATOR_CALCULATIONS);
SetIndexBuffer(2,BufferMAP,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,BufferMAL,INDICATOR_CALCULATIONS);

Główne części Kodeksu

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);
  }
//+------------------------------------------------------------------+

 

About Me

I'm Mike Semlitsch the owner of PerfectTrendSystem.com. My trading career started in 2007. Since 2013 I have helped thousands of traders to take their trading to the next level. Many of them are now constantly profitable traders. 

The following performance was achieved by me while trading live in front of hundreds of my clients:

Connect With Me:  

Results From 5 Months!
This service starts soon! Be the first who get's notified when it begins!

This FREE Indicator Can Transform
Your Trading!

FREE Indicator + Telegram Group


Request the Ultimate Double Top/Bottom Indicator which is used by 10,000+ traders.