Hull Trend_v1

Download script
Hull Trend_v1

The Hull Trend indicator is a specialized technical analysis tool designed to identify the primary direction of market momentum by smoothing out price fluctuations. It provides traders with a clearer picture of the "flow" of the market, helping to filter out minor price noise that can often lead to false signals.

How it Works

The logic behind this tool follows a multi-layered calculation process to ensure it reacts quickly to new price movements while remaining smooth:

  1. Weighted Movement Analysis: Instead of using a standard moving average, the script utilizes a "Linear Weighted Moving Average" (LWMA). This gives more importance to recent price data, making the indicator more responsive to current market conditions than traditional models.
  2. The Hull Calculation: The script performs a unique two-step calculation. First, it calculates the difference between two different moving averages (one based on half of your chosen period and one based on the full period). It then applies a second layer of smoothing over those results. This specific mathematical combination is what allows the Hull Trend to be significantly faster and more "fluid" than most other trend indicators.
  3. Trend Detection: The indicator compares these internal calculations to determine the current market bias. When the underlying momentum shifts, the script identifies whether the price is trending upward or downward.

Visual Representation

The tool translates this complex math into a visual format on your chart:

  • Momentum Shifting: By tracking the relationship between the calculated averages, the indicator detects when the trend changes direction.
  • Dynamic Range Mapping: The script monitors the high and low prices of the candles based on these trend shifts. It essentially "wraps" around the price action, highlighting the boundaries of the current trend movement.

Summary for Traders

The primary goal of this script is to provide a more reactive yet stable trend line. Because it uses the Hull logic, it aims to reduce the "lag" (the delay between a price move and the indicator's reaction) that you typically see with standard moving averages, allowing you to see the current market direction as it develops in real-time.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
13 Views
0 Downloads
0 Favorites
Hull Trend_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                   Hull Trend.mq4 |
//|                                     Copyright © 2005, adoleh2000 |
//|                                             adoleh2000@yahoo.com |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2005, adoleh2000."
#property  link      "adoleh2000@yahoo.com"
//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Blue
#property  indicator_color2  Red
#property  indicator_color3  EMPTY
#property  indicator_color4  EMPTY



//---- indicator parameters
extern int HMA_Period=20;
extern double Price=PRICE_CLOSE;
extern double Displacement=0;
//---- indicator buffers
double ind_buffer0[];
double ind_buffer1[];
double HighBuffer[];
double LowBuffer[];



int        draw_begin0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
 {
//---- indicator buffers mapping
  //IndicatorBuffers(4);
//   ArraySetAsSeries(ind_buffer1,true);
//---- drawing settings
  SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,1);
  SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,1);
  SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);
  SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1);


  SetIndexBuffer(0,HighBuffer);
  SetIndexBuffer(1,LowBuffer);
  SetIndexBuffer(2,ind_buffer0);
  SetIndexBuffer(3,ind_buffer1);



  draw_begin0=HMA_Period+MathFloor(MathSqrt(HMA_Period));

  SetIndexDrawBegin(0,draw_begin0);
  SetIndexDrawBegin(1,draw_begin0);
  SetIndexDrawBegin(2,draw_begin0);
  SetIndexDrawBegin(3,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,shift;
  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,i)*2-iMA(NULL,0,HMA_Period,0,MODE_LWMA,Price,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+Displacement);

     //Comment ("MA=",ind_buffer1[i],"; ","HMA=",ind_buffer0[i]);

for (shift=i; shift>=0;shift--)
{
     if (ind_buffer1[shift] > ind_buffer0[shift])
  {
     HighBuffer[shift]=High[shift];
     LowBuffer[shift]=Low[shift];
  }

  else

if (ind_buffer1[shift]<  ind_buffer0[shift])
  {
     LowBuffer[shift]=High[shift];
     HighBuffer[shift]=Low[shift];
   }
}
//---- done
  return(0);
 }

Comments