HMA_RSI_Test1

Download script
Author: Reconfigured by General Public
HMA_RSI_Test1

This technical tool is designed to provide traders with a clear visual representation of market momentum and trend direction by combining three distinct analytical layers. Instead of simply looking at raw price movements, the logic processes the data through a sequence of mathematical transformations to filter out "noise" and highlight significant shifts in market behavior.

How the Logic Works

1. Data Smoothing and Weighting The first step the script takes is to analyze price action using a Weighted Moving Average (WMA). By focusing on these averages, the tool smooths out minor, erratic price fluctuations that might otherwise distract a trader. It specifically looks at how recent prices relate to historical ones to establish a baseline of "flow."

2. Trend Velocity Calculation Rather than looking at the trend directly, the logic calculates the "velocity" of the movement. It takes a mathematical formula (a variation of a Hull Moving Average logic) to compare short-term price movements against longer-term averages. This allows the script to identify how quickly the market is accelerating or decelerating in a specific direction.

3. Momentum Filtering (RSI Integration) The most critical layer of this logic is that it applies an RSI (Relative Strength Index) calculation to the smoothed data rather than the raw price itself. This essentially measures the "strength" of the trend velocity. By doing this, the tool can distinguish between a strong, healthy move and a weak, exhausting one.

4. Trend Identification and Visual Output The final stage of the logic is the visual separation of the data into two distinct categories:

  • Uptrends: When the momentum strength is increasing, the script plots an "Up" line (Aqua).
  • Downtrends: When the momentum strength is decreasing, the script plots a "Down" line (Red).

Key Behavioral Features

  • Dynamic Switching: The logic is designed to recognize "pivot points." When the momentum shifts from positive to negative (or vice versa), the script identifies this crossover.
  • Clear Visualization: By separating the data into two different buffers, the tool makes it easy for a user to see exactly where one trend ends and another begins, effectively "coloring" the market's behavior based on its underlying strength.
  • Customizable Sensitivity: The logic includes parameters that allow users to adjust the period (the timeframe of data analyzed) and the calculation method, ensuring the tool can be tuned to different assets or trading styles.
Indicators Used
Moving average indicatorRelative strength index
Miscellaneous
Implements a curve of type %1
13 Views
0 Downloads
0 Favorites
HMA_RSI_Test1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                HMA_RSI_Test1.mq4 |
//|                                                              HMA |
//|                Copyright © 2006 WizardSerg <wizardserg@mail.ru>, |
//|                                    ?? ??????? ForexMagazine #104 |
//|                                               wizardserg@mail.ru |
//|                         Revised by IgorAD,igorad2003@yahoo.co.uk |   
//|                                        http://www.forex-tsd.com/ |                                      
//+------------------------------------------------------------------+

#property copyright "Reconfigured by General Public" 
#property link      "Everyones@Planet.Earth" 

#property indicator_separate_window

#property indicator_buffers 2 

#property indicator_color1 Aqua 
#property indicator_color2 Red
#property indicator_maximum 100
#property indicator_minimum 0
#property indicator_level1 70
#property indicator_level2 50
#property indicator_level3 30

//---- input parameters 

extern int       period=14; 
extern int       method=1;                         // 0 = MODE_SMA 
extern int       price=0;                          // 0 = PRICE_CLOSE
extern int       width=2;
//extern string    Sound_File="alert2.wav";

//---- buffers 

double Uptrend[];
double Dntrend[];
double ExtMapBuffer[]; 


//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int init() 
{ 
    IndicatorBuffers(3);  
    SetIndexBuffer(0, Uptrend); 
    
    SetIndexBuffer(1, Dntrend); 
    
    SetIndexBuffer(2, ExtMapBuffer); 
    ArraySetAsSeries(ExtMapBuffer, true); 
    
    SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,width);
    SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,width);
    
    IndicatorShortName(" HMA_RSI_Test1 ( "+period+" )"); 
    return(0); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function                       | 
//+------------------------------------------------------------------+ 

int deinit() 
{ 
    return(0); 
} 

//+------------------------------------------------------------------+ 
//|                                                                  | 
//+------------------------------------------------------------------+ 

double WMA(int x, int p) 
{ 
    return(iMA(Symbol(), 0, p, 0, method, price, x));
} 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+ 

int start() 
{ 
    int counted_bars = IndicatorCounted(); 
    
    if(counted_bars < 0) 
        return(-1); 
                  
    int x = 0; 
    int p = MathSqrt(period);              
    int e = Bars - counted_bars + period + 1; 
    
    double vect[], trend[]; 
    
    if(e > Bars) e = Bars;    

    ArrayResize(vect, e); 
    ArraySetAsSeries(vect, true);
    ArrayResize(trend, e); 
    ArraySetAsSeries(trend, true); 
    
    for(x = 0; x < e; x++) 
    { 
        vect[x] = 2*WMA(x, period/2) - WMA(x, period);
    } 

    for(x = 0; x < e-period; x++)
     
        ExtMapBuffer[x] = iRSIOnArray(vect, 0, p, x);
    
    for(x = e-period; x >= 0; x--)
    {     
        trend[x] = trend[x+1];
        if (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1;
        if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
    
    if (trend[x]>0)
    { Uptrend[x] = ExtMapBuffer[x]; 
      if (trend[x+1]<0) {
      Uptrend[x+1]=ExtMapBuffer[x+1];
      //PlaySound(Sound_File);
      }
      Dntrend[x] = EMPTY_VALUE;
      
    }
    else              
    if (trend[x]<0)
    { 
      Dntrend[x] = ExtMapBuffer[x]; 
      if (trend[x+1]>0) {
      Dntrend[x+1]=ExtMapBuffer[x+1];
      //PlaySound(Sound_File);
      }
      
      Uptrend[x] = EMPTY_VALUE;
      
    }              
    
   }
    
  return(0); 
} 
//+------------------------------------------------------------------+ 

Comments