HMAlower

This script is designed to generate a specialized technical analysis tool known as the Hull Moving Average (HMA) on your trading charts. Unlike standard moving averages that can sometimes lag behind current market prices, this indicator is engineered to provide a smoother visualization of price trends while remaining highly responsive to recent fluctuations.

How the Logic Works

The script achieves its smooth yet fast performance through a multi-layered calculation process:

1. The Foundation (Weighted Averages) Instead of looking at simple averages, the logic utilizes "Linear Weighted Moving Averages." This means it gives more importance to the most recent price data points. By focusing on current action, the indicator is better equipped to react quickly when a trend shifts.

2. The Differential Calculation The script performs a unique mathematical operation where it compares two different weighted averages: one based on half of the user-defined period and another based on the full period. By calculating the difference between these two measurements, the tool identifies the "velocity" or the core momentum of the price movement.

3. The Smoothing Pass To ensure the resulting line isn't too erratic or "jittery," the script applies a final smoothing pass over that differential data. This step rounds out the edges of the trend line, removing insignificant market noise while preserving the overall direction of the movement.

Key Features for Traders

  • Reduced Lag: The primary objective of this logic is to minimize the delay between a price change and the indicator's reaction. It seeks to show you where the market is going now, rather than where it has already been.
  • Customizable Sensitivity: Through the "HMA_Period" setting, users can adjust how much historical data the script considers. A lower period makes the line more sensitive to rapid changes, while a higher period provides a broader view of the long-term trend.
  • Visual Clarity: The result is rendered as a solid blue line on your chart, making it easy to identify support, resistance, and momentum shifts at a glance.
Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
14 Views
0 Downloads
0 Favorites
HMAlower
/*-----------------------------+
|			       |
| 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  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