HMA_RSI_Test2
Download scriptThis 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.
/*-----------------------------+
| |
| 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