Author: strategybuilderfx.com
JMA RSX_v1

This technical tool is designed to help traders visualize and interpret the momentum of a financial asset by smoothing out price fluctuations into a readable percentage-based scale. Instead of looking at raw price movements, which can be volatile and distracting, this script analyzes how quickly prices are moving relative to their recent history.

How it Works

The logic follows a multi-step mathematical process to filter out "market noise":

  • Data Smoothing: The tool looks back at a specific window of time (defined by the length parameter) to observe price changes. It uses a series of weighted calculations—similar to a moving average—to ensure that sudden, minor price spikes do not cause erratic jumps in the indicator.
  • Momentum Tracking: By comparing current prices against these weighted averages, the script identifies the underlying "velocity" of the market. It essentially calculates how much strength is behind a current move.
  • Relative Scaling: The final result is converted into a percentage value ranging from 0 to 100. This allows you to see the strength of a trend on a level playing field, regardless of whether the asset being traded is worth $1 or $1,000.

Visual Interpretation

The indicator operates within a dedicated window featuring three key levels: 70 (Overbought/Strong), 50 (Neutral), and 30 (Oversold/Weak).

  • When the value rises toward 100: It indicates significant upward momentum, suggesting that the current trend has strong buying pressure.
  • When the value drops toward 0: It suggests powerful downward momentum or heavy selling pressure.
  • The Centerline (50): This serves as the baseline. When the indicator sits at 50, it suggests a period of consolidation or a balanced market where neither buyers nor sellers have a dominant advantage.

By using this tool, you can more easily identify when a trend is becoming overextended or when a price movement has enough "weight" to be considered significant by the broader market.

Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
JMA RSX_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

#property copyright "strategybuilderfx.com"
#property link "finger"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Magenta
#property indicator_level1 70
#property indicator_level2 30
#property indicator_level3 50
#property indicator_maximum 100
#property indicator_minimum 0

//---- input parameters
extern int Len=14; //---- buffers
double rsx[];
double f88, f90;
double f0, v4, v8, vC, v10, v14, v18, v20;
double f8, f10, f18, f20, f28, f30, f38, f48, v1C; 
double f50, f58, f60, f68, f70, f78, f80, f40;

int init() {
SetIndexStyle(0,DRAW_LINE); 
SetIndexBuffer(0,rsx); 
IndicatorShortName("rsxc("+Len+")");
return(0); 
}

int deinit() 
{ 
return(0); 
}

int start() 
{ 
int counted_bars=IndicatorCounted(),limit,shift; 

if (counted_bars<0) return(-1); 
if (counted_bars>0) counted_bars--; 
limit=Bars-Len-1; 
if(counted_bars>Len) limit=Bars-counted_bars-1;

for (shift=limit;shift>=0;shift--) {
if (f90 == 0.0) { 
f90 = 1.0; 
f0 = 0.0; 
if (Len-1 >= 5) f88 = Len-1.0; else f88 = 5.0; 
f8 = 100.0*(Close[shift]); 
f18 = 3.0 / (Len + 2.0); 
f20 = 1.0 - f18; 
} else{
if (f88 <= f90) f90 = f88 + 1; 
else 
f90 = f90 + 1;
f10 = f8; 
f8 = 100*Close[shift]; 
v8 = f8 - f10; 
f28 = f20 * f28 + f18 * v8; 
f30 = f18 * f28 + f20 * f30; 
vC = f28 * 1.5 - f30 * 0.5; 
f38 = f20 * f38 + f18 * vC; 
f40 = f18 * f38 + f20 * f40; 
v10 = f38 * 1.5 - f40 * 0.5; 
f48 = f20 * f48 + f18 * v10; 
f50 = f18 * f48 + f20 * f50; 
v14 = f48 * 1.5 - f50 * 0.5; 
f58 = f20 * f58 + f18 * MathAbs(v8); 
f60 = f18 * f58 + f20 * f60; 
v18 = f58 * 1.5 - f60 * 0.5;
f68 = f20 * f68 + f18 * v18; 

f70 = f18 * f68 + f20 * f70; 
v1C = f68 * 1.5 - f70 * 0.5; 
f78 = f20 * f78 + f18 * v1C; 
f80 = f18 * f78 + f20 * f80; 
v20 = f78 * 1.5 - f80 * 0.5;

if ((f88 >= f90) && (f8 != f10)) f0 = 1.0; 
if ((f88 == f90) && (f0 == 0.0)) f90 = 0.0; 

} 

if ((f88 < f90) && (v20 > 0.0000000001)) { 

v4 = (v14 / v20 + 1.0) * 50.0; 
if (v4 > 100.0) v4 = 100.0; 
if (v4 < 0.0) v4 = 0.0; 

} else { 
v4 = 50.0; 
}
rsx[shift]=v4; 
} 
return(0); 
}

Comments