TRSI2
Download scriptThis technical indicator is designed to provide a smoothed and refined view of market momentum by layering multiple types of moving averages over a standard Relative Strength Index (RSI). Instead of looking at raw price fluctuations, it filters the data through several mathematical stages to identify trends more clearly.
How the Logic Works
The script processes data in five distinct stages to arrive at its final visual output:
1. The Foundation (Base RSI) The process begins by calculating a standard Relative Strength Index (RSI) based on a 14-period timeframe of the closing prices. This acts as the primary raw data point, representing the basic momentum of the asset.
2. The First Smoothing Layer The script then takes that RSI data and applies a 3-period Exponential Moving Average (EMA). By using an exponential average, the indicator gives slightly more weight to recent price action while beginning to "round off" the sharp peaks and valleys of the raw RSI.
3. The Second Smoothing Layer It repeats this process by taking the result of the previous step and applying another 3-period Exponential Moving Average. This further stabilizes the data, reducing market "noise."
4. The Third Smoothing Layer (Triple EMA) For a third time, a 3-period Exponential Moving Average is applied to the previous calculation. By layering three consecutive exponential averages, the indicator creates a highly fluid line that follows the core trend of the RSI without being distracted by minor price spikes. This serves as one of the primary visual lines on your chart.
5. The Final Refined Line (TRSI) The final step takes the result of the third smoothing layer and applies a 5-period Simple Moving Average (SMA). Crucially, this specific average is "displaced" or shifted 3 bars to the right. This shift provides a slight delay, which helps in identifying confirmed trend reversals rather than reactionary movements.
Summary of Visual Output
The indicator generates several distinct visual elements on your trading platform:
- Gray Line: Represents the foundational RSI data.
- Intermediate Lines: Show the transitional smoothing steps (depending on your settings).
- Blue Line: Represents the "Triple EMA" result, showing a highly smoothed momentum trend.
- Red Line: Represents the final TRSI value—the most refined and shifted version of the data, used to observe long-term momentum trends with reduced volatility.
//+------------------------------------------------------------------+
//| TRSI |
//| Copyright © 2007, Robert Hill |
//| http://www.metaquotes.net/ |
//| |
//| This is the formula from Mario:
//|
//| 1) RSI 14 period of close. Plot this as the gray line
//|
//| 2) 3-period exponential moving average of #1 above.
//|
//| 3) 3-period exponential moving average of #2 above.
//|
//| 4) 3-period exponential moving average of #3 above.
//| Plot this as the blue line.
//|
//| 5) 5-period simple moving average of #4 above
//| displaced 3 bars to the right.
//| Plot this as the red line.
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Robert Hill "
#property link "http://www.metaquotes.net/"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Gray
#property indicator_color2 Aqua
#property indicator_color3 Red
#property indicator_color4 Yellow
#property indicator_color5 White
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1
#property indicator_width5 1
extern string r1=" 1. RSI(14) of Close";
extern string r2=" 2. EMA(3) of #1";
extern string r3=" 3. EMA(3) of #2";
extern string r4=" 4. EMA(3) of #3";
extern string r5=" 5. SMA(5) of #4";
extern string r6=" shifted right 3 bars";
extern int RSI_Period = 14;
extern string p = "--Applied Price Types--";
extern string p0 = " 0 = close";
extern string p1 = " 1 = open";
extern string p2 = " 2 = high";
extern string p3 = " 3 = low";
extern string p4 = " 4 = median(high+low)/2";
extern string p5 = " 5 = typical(high+low+close)/3";
extern string p6 = " 6 = weighted(high+low+close+close)/4";
extern int RSI_AppliedPrice = 0;//0=close, 1=open, 2=high, 3=low, 4=median(high+low)/2, 5=typical(high+low+close)/3, 6=weighted(high+low+close+close)/4
extern int EMA1_Period = 3;
extern int EMA2_Period = 3;
extern int EMA3_Period = 3;
extern int SMA_Period = 5;
extern int SMA_Shift = 3;
extern bool PlotEMA1 = true;
extern bool PlotEMA2 = true;
//---- buffers
double RSI[];
double EmaOfRSI[];
double EmaOfEmaOfRSI[];
double EmaOfEmaOfEmaOfRSI[];
double TRSI[];
double TempEma1RSI[];
double TempEma2RSI[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
IndicatorBuffers(7);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
SetIndexDrawBegin(0,RSI_Period);
IndicatorDigits(4);
//---- 3 indicator buffers mapping
if(!SetIndexBuffer(0,RSI) &&
!SetIndexBuffer(1,EmaOfEmaOfEmaOfRSI) &&
!SetIndexBuffer(2,TRSI) &&
!SetIndexBuffer(3,EmaOfRSI) &&
!SetIndexBuffer(4,EmaOfEmaOfRSI) &&
!SetIndexBuffer(5,TempEma1RSI) &&
!SetIndexBuffer(6,TempEma2RSI))
Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
SetIndexLabel(0,"RSI");
SetIndexLabel(1,"TripleEmaOfRSI");
SetIndexLabel(2,"TRSI");
SetIndexLabel(3,"EmaOfRSI");
SetIndexLabel(4,"DoubelEmaOfRSI");
SetLevelStyle(STYLE_DOT, 1, Gray);
SetLevelValue(0, 30);
SetLevelValue(1, 50);
SetLevelValue(2, 70);
IndicatorShortName("TRSI("+RSI_Period+")");
//---- initialization done
return(0);
}
int start()
{
int i, limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars - RSI_Period;
// 1) RSI 14 period of close. Plot this as the gray line
for(i = limit; i >= 0; i--)
RSI[i] = iRSI(NULL,0,RSI_Period,RSI_AppliedPrice,i);
// 2) 3-period exponential moving average of #1 above.
for(i = limit; i >=0; i--)
TempEma1RSI[i] = iMAOnArray(RSI,Bars,EMA1_Period,0,MODE_EMA,i);
// 3) 3-period exponential moving average of #2 above.
for(i = limit; i >=0; i--)
TempEma2RSI[i] = iMAOnArray(TempEma1RSI,Bars,EMA2_Period,0,MODE_EMA,i);
// 4) 3-period exponential moving average of #3 above.
for(i = limit; i >=0; i--)
EmaOfEmaOfEmaOfRSI[i] = iMAOnArray(TempEma2RSI,Bars,EMA3_Period,0,MODE_EMA,i);
//========== COLOR CODING ===========================================
// 5) 5-period simple moving average of #4 above
// displaced 3 bars to the right.
for(i = limit; i >=0; i--)
{
if (PlotEMA1) EmaOfRSI[i] = TempEma1RSI[i]; else EmaOfRSI[i] = EMPTY_VALUE;
if (PlotEMA2) EmaOfEmaOfRSI[i] = TempEma2RSI[i]; else EmaOfEmaOfRSI[i] = EMPTY_VALUE;
TRSI[i] = iMAOnArray(EmaOfEmaOfEmaOfRSI,Bars,SMA_Period,SMA_Shift,MODE_SMA,i);
}
return(0);
}
//+------------------------------------------------------------------+
Comments