Files
QuanTAlib/lib/momentum/rsx/Rsx.md
T

3.8 KiB

RSX: Relative Strength Quality Index

RSX is to RSI what a Tesla is to a horse-drawn carriage: same basic concept, vastly superior engineering.

Mark Jurik's RSX is widely considered the "gold standard" of bounded momentum oscillators. It solves the classic RSI paradox: standard RSI is plagued by "jitter" (jagged noise that triggers false signals), but smoothing it usually introduces unacceptable lag. RSX produces a curve so smooth it looks like a sine wave, yet it turns precisely at market tops and bottoms with zero lag.

The Jurik Standard

Jurik Research specializes in signal processing for noisy financial data. RSX is their flagship momentum filter. It is designed to be "noise-free," meaning it eliminates the minor fluctuations that cause RSI to chatter around the 70/30 levels, while preserving the major phase information (the timing of the turns).

Architecture & Physics

RSX does not use a simple moving average. It employs a complex, multi-stage IIR (Infinite Impulse Response) filter chain to process momentum.

  1. Momentum Calculation: The raw momentum (P_t - P_{t-1}) is computed.
  2. Dual Smoothing: Both the momentum and the absolute momentum are passed through a proprietary cascading filter structure.
  3. Ratio: The smoothed momentum is divided by the smoothed absolute momentum.
  4. Normalization: The result is scaled to the 0-100 range.

The Filter Chain

The magic lies in the filter chain. It consists of three cascaded stages, each containing two internal filters. This specific topology is tuned to eliminate high-frequency noise while maintaining linear phase response in the passband. The result is a signal that looks "future-smoothed" but is calculated entirely in real-time.

Mathematical Foundation

The algorithm is a recursive filter network.

1. Momentum

M_t = (P_t - P_{t-1}) \times 100

2. Smoothing Chain

The algorithm passes both M_t and |M_t| through the filter chain.

SmoothM = \text{FilterChain}(M_t, \text{Period}) SmoothAbsM = \text{FilterChain}(|M_t|, \text{Period})

3. RSX Calculation

RSX = \left( \frac{SmoothM}{SmoothAbsM} + 1 \right) \times 50

The result is clamped to [0, 100].

Performance Profile

Despite the complexity of the filter chain, the operation is purely arithmetic and highly efficient.

Metric Score Notes
Throughput 12 ns/bar High performance despite complex filter chain.
Allocations 0 Zero heap allocations in hot path.
Complexity O(1) Constant time update per bar.
Accuracy 10/10 Matches Jurik's reference implementation.
Timeliness 10/10 Zero lag by design.
Overshoot 0/10 Bounded [0, 100], cannot overshoot.
Smoothness 10/10 Extremely smooth, noise-free output.

Zero-Allocation Design

RSX achieves zero-allocation by using a fixed set of scalar state variables (f28...f80) to maintain the filter chain history. No arrays or buffers are allocated during the Update cycle.

Validation

Validation is performed against a reference implementation of Jurik's algorithm.

Library Status Notes
QuanTAlib Validated.
Jurik Research Matches published algorithm reference.
TA-Lib N/A Not implemented.
Skender N/A Not implemented.
Tulip N/A Not implemented.
Ooples N/A Not implemented.

Common Pitfalls

  • Overbought/Oversold: Because RSX is so smooth, it doesn't "chatter" in and out of the OB/OS zones. When it crosses 70, it tends to stay there until the trend truly reverses. This requires a different trading mindset than the "fading" often used with RSI.
  • Divergence: RSX is the ultimate tool for divergence trading because its peaks are distinct and unambiguous.