HMA_RSI_Test2

Download script
Author: Reconfigured by General Public
HMA_RSI_Test2

This technical tool is designed to analyze market momentum by combining two sophisticated mathematical concepts: a specialized moving average calculation and the Relative Strength Index (RSI). Instead of simply showing price movement, it translates price fluctuations into a visual trend indicator that helps traders identify the direction and strength of the market.

Core Operational Logic

The script functions through a three-step analytical process:

1. Data Smoothing and Transformation The tool begins by processing raw price data through a specific weighting formula. It creates a mathematical "vector" by comparing different variations of the Relative Strength Index. This step is designed to filter out minor market noise and highlight the underlying core movement of the asset, ensuring that the final signal is based on sustained momentum rather than brief, erratic price spikes.

2. Trend Mapping Once the smoothed data is established, the script applies a secondary layer of analysis to calculate the "Trend Map." It compares the current value of the processed data against previous values to determine the immediate trajectory of the market. By calculating these shifts dynamically, the script identifies whether the momentum is actively shifting upwards or downwards.

3. Visual Trend Identification The final output is divided into two distinct visual components:

  • Uptrend Recognition: When the analysis confirms that the momentum is moving upward, the tool plots a specific line (colored Aqua) to represent an active buying trend.
  • Downtrend Recognition: When the momentum shifts downward, the tool switches to a different line (colored Red) to signify an active selling trend.

Key Features for the User

  • Dynamic Switching: The indicator is designed to react to "crossovers." When the market sentiment flips from positive to negative (or vice versa), the script recognizes this transition point and updates the visual display accordingly.
  • Customizable Sensitivity: Users can adjust the "Period" setting, which dictates how much historical data the tool considers. A shorter period makes the indicator more reactive to quick price changes, while a longer period provides a smoother, more stable view of long-term trends.
  • Visual Clarity: By using a separate window and distinct colors for different trend directions, the tool allows traders to quickly see at a glance whether the current market state is bullish or bearish without being distracted by heavy price action.
Indicators Used
Relative strength indexRelative strength index
Miscellaneous
Implements a curve of type %1
14 Views
0 Downloads
0 Favorites
HMA_RSI_Test2
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                HMA_RSI_Test2.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_Test2 ( "+period+" )"); 
    return(0); 
} 

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

int deinit() 
{ 
    return(0); 
} 

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

double WMA(int x, int p) 
{ 
    return(iRSI(Symbol(), 0, p, 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