HMA_v4

This script is designed to create a specialized technical analysis tool for trading platforms, specifically the Hull Moving Average (HMA). Unlike standard moving averages that can sometimes lag behind current market price action, this tool aims to provide a smoother line that reacts more quickly to recent price changes while still filtering out minor market "noise."

How the Logic Works

The script achieves its results by processing price data through a multi-layered calculation sequence:

1. Weighted Price Filtering The logic begins by looking at the opening prices of candles over a specific timeframe (defined by the user). Instead of treating all candles equally, it applies a "Linearly Weighted" approach. This means it gives more significance to the most recent price data, helping the tool stay relevant to what is happening in the market right now.

2. The Difference Calculation The script performs a unique mathematical operation where it compares two different weighted averages:

  • It calculates a short-term average (half the length of your chosen period).
  • It calculates a long-term average (the full length of your chosen period).
  • By subtracting the long-term average from double the short-term average, the script isolates the momentum and "velocity" of the price movement.

3. Smoothing the Result The final step takes that calculated difference and runs it through one last smoothing pass. This ensures that the resulting line on your chart is not jagged or erratic. It creates a fluid, continuous curve that identifies the underlying trend clearly.

Key Features for the User

  • Customizable Sensitivity: You can adjust the "Period" to decide how many candles the tool should look at. A smaller number makes the line more reactive; a larger number makes it slower and smoother.
  • Visual Clarity: The script renders as a yellow line directly on your main price chart, allowing you to see the trend direction instantly.
  • Delayed Start: To ensure accuracy, the script automatically calculates a "starting point" based on the math required for the moving average, preventing messy or inaccurate lines from appearing at the very beginning of your chart history.

In short, this tool is built for traders who want to see the true direction of the market trend with less delay than traditional indicators provide.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
15 Views
0 Downloads
0 Favorites
HMA_v4
/*-----------------------------+
|			       |
| 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  Yellow

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