HMA Indicator For MT5

HMA Indicator For MT5

HMA Indicator For MT5HMA Indicator For MT5不像总是具有实时计算问题的经典移动平均值。在船体移动平均线的帮助下,您可以找到一种独特的HMA,通常称为船体移动平均线,以非常精确的方式响应价格变动。当交易工具的价格下跌时,移动平均线也将向南移动,从而确认了看跌趋势的建立。相反,当价格开始获得看涨势头时,移动平均线将开始在北部交易。要使用此工具最大化利润因子,应在每日时间范围内使用它。那些了解价格行为交易策略的人还可以在船壳移动平均线中寻找价格行为信号以进行交易。但是,请确保在使用此指标交易市场时,永远不要使用太紧的止损或大交易量。

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

 

安装HMA Indicator For MT5

通过上面的表格下载指标后,您需要解压缩zip文件。然后,您需要将文件HMA.mq5复制到MT5安装的文件夹MQL5Indicators中。之后,请重启MT5,然后您将能够在指标列表中看到该指标。

HMA Indicator For MT5参数

HMA Indicator For MT5具有要配置的2 参数。

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

HMA Indicator For MT5缓冲区

HMA Indicator For MT5提供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);
  }
//+------------------------------------------------------------------+

 

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.