_2523HULL_MA

_2523HULL_MA

This tool is designed to provide traders with a more responsive and fluid way to visualize price trends on a trading chart. While standard moving averages often suffer from a delay—meaning they react slowly to sudden market shifts or, conversely, become too "noisy" and erratic—this specific indicator utilizes a multi-layered calculation method to balance speed and smoothness.

How the Logic Works

The indicator functions by performing a series of nested calculations rather than relying on a single average. It processes market data through three distinct conceptual stages:

  1. Weighting the Momentum: First, the script looks at the price action over a specific period (defined by the user). It calculates two different linear weighted averages: one that is half the length of the target period and another that is the full length. By doubling the shorter average and subtracting the longer one, the tool captures the immediate "momentum" or change in direction of the market.

  2. Smoothing the Data: Once that momentum is identified, the script applies a second layer of calculation. It takes the results from the first step and runs them through a weighted average again, but this time using a mathematical square root of the period. This specific step is what provides the "Hull" characteristic, effectively filtering out the jittery movements while maintaining a much tighter fit to the actual price than a standard moving average would allow.

  3. Visual Output: The final result is plotted as a single continuous line on your chart. Because of this dual-processing logic, the line aims to stay very close to the current price during fast trends (reducing lag) while remaining smooth enough to clearly indicate the overall direction of the market.

Key Features for the User

  • Reduced Lag: By calculating differences between moving averages before smoothing them out, the indicator identifies trend turns faster than traditional methods.
  • Visual Clarity: The tool is designed to produce a clean, "flowing" line that helps traders distinguish between minor price fluctuations and significant trend shifts.
  • Customizable Sensitivity: Users can adjust the primary period setting to make the line react more aggressively to short-term price changes or more conservatively for long-term trend analysis.
Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
_2523HULL_MA
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                          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  DarkOrange

//---- indicator parameters
extern int HMA_Period=5;
//---- 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);
   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_CLOSE,i)*2-
                     iMA(NULL,0,HMA_Period,0,MODE_LWMA,PRICE_CLOSE,i);
//---- 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