HMAhigher_v1

Download script
HMAhigher_v1

This tool is a specialized technical analysis indicator designed to help traders identify trends in the financial markets with greater precision and less "lag" than standard moving averages. It utilizes a specific mathematical approach known as the Hull Moving Average (HMA).

How the Logic Works

The primary goal of this script is to provide a smooth, responsive line on your trading chart that follows price movements closely while filtering out minor market noise. To achieve this, the logic operates in two distinct stages:

1. The Weighted Calculation Phase Instead of looking at the price simply as it is, the script first performs a complex calculation based on "Linear Weighted Moving Averages." It takes the current price data and applies a specific weight to it—essentially giving more importance to the most recent price actions.

By calculating two different versions of these weighted averages (one with a shorter period and one with a longer period) and combining them, the script effectively "accelerates" the average's ability to react to new information. This helps the indicator stay closer to the actual price line during rapid market shifts.

2. The Smoothing Phase Once that initial weighted calculation is complete, the script performs a second pass of processing. It takes the results from the first stage and smooths them out using a square root calculation of your chosen period.

This two-step process is what makes this indicator unique:

  • The first step ensures the line is fast and reactive.
  • The second step ensures the line remains smooth and doesn't jump erratically.

Key Features for the User

  • Reduced Lag: Unlike traditional moving averages that often "trail" behind the price, this logic tries to stay as close to the current market action as possible.
  • Customizable Sensitivity: You can adjust the "HMA_Period" to determine how many bars of data the script should consider. A lower number will make the line more reactive to sudden changes; a higher number will make it smoother and better for identifying long-term trends.
  • Visual Clarity: The tool renders as a solid blue line on your chart, providing a clear visual cue of the market's momentum.

In short, this script is designed for traders who need a reliable trend-following tool that balances speed and smoothness, helping you identify the direction of the market more efficiently than standard tools allow.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
13 Views
0 Downloads
0 Favorites
HMAhigher_v1
//+------------------------------------------------------------------+
//|                                                          HMA.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2004, MetaQuotes Software Corp."
#property  link      "http://www.metaquotes.net/"
//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 1
#property  indicator_color1  Blue

//---- indicator parameters
extern int HMA_Period=20;
//---- indicator buffers
double     ind_buffer0[];
double     ind_buffer1[];

int        draw_begin0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator buffers mapping
   IndicatorBuffers(2);
   if(!SetIndexBuffer(0,ind_buffer0) && !SetIndexBuffer(1,ind_buffer1))
      Print("cannot set indicator buffers!");
//   ArraySetAsSeries(ind_buffer1,true);
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
   draw_begin0=HMA_Period+MathFloor(MathSqrt(HMA_Period));
   SetIndexDrawBegin(0,draw_begin0);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("HMA("+HMA_Period+")");
   SetIndexLabel(0,"Hull Moving Average");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit,i;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<1)
     {
      for(i=1;i<=draw_begin0;i++) ind_buffer0[Bars-i]=0;
      for(i=1;i<=HMA_Period;i++) ind_buffer1[Bars-i]=0;
     }
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- MA difference counted in the 1-st buffer
   for(i=0; i<limit; i++)
      ind_buffer1[i]=iMA(NULL,0,MathFloor(HMA_Period/2),0,MODE_LWMA,PRICE_OPEN,i)*2-
                     iMA(NULL,0,HMA_Period,0,MODE_LWMA,PRICE_OPEN,i)+Point*40;
//---- HMA counted in the 0-th buffer
   for(i=0; i<limit; i++)
      ind_buffer0[i]=iMAOnArray(ind_buffer1,0,MathFloor(MathSqrt(HMA_Period)),0,MODE_LWMA,i);
//---- done
   return(0);
  }

Comments