Skip to content

RSI (Relative Strength Index)

Relative Strength Index with Wilder smoothing by default (Cutler/SMA opt-in). Cross-validated against pandas-ta and Bloomberg to 1.4e-14. Edge-first on an upstream close series. Wired to more than one Price Factor, it fans out to per-ticker by_symbol results.

What (One-liner)

A Layer-1 transform: consume an upstream close series, emit the RSI series. Wilder's RMA is the default (matches Bloomberg 1.4e-14); Cutler's SMA is smoothing = 'sma'.

Inputs

  • period (number, optional) — lookback, default 14.
  • smoothing (string, optional) — 'wilder' (Bloomberg, default) or 'sma' (Cutler).

Outputs

  • rsi — RSI series aligned to the input, in [0, 100].
  • by_symbol — per-ticker map when fed by multiple Price Factors.

How to use

  1. Upstream price_factor provides the close series.
  2. Set period (default 14).
  3. Choose smoothing = 'wilder' (default) or 'sma' (Cutler).

Core formulas

delta = prices.diff()
pos = delta.clip(lower=0); neg = (-delta).clip(lower=0)

# Wilder (default, Bloomberg parity):
gain = pos.ewm(alpha=1/14, adjust=False, min_periods=14).mean()
loss = neg.ewm(alpha=1/14, adjust=False, min_periods=14).mean()

# Cutler's (opt-in):
gain = pos.rolling(14).mean()
loss = neg.rolling(14).mean()

rs = gain / loss
rsi = 100 - 100 / (1 + rs)

Assumptions & applicability

Assumptions: Wilder's is canonical (default for most terminals + TradingView) + divide-by-zero → 100 + first period values are NaN.

Applicability: overbought/oversold, divergence, momentum feature; equities / fx / crypto / commodities, global, daily–monthly, min 15 observations.

Not applicable: intraday tick, <15 days, sideways whipsaw.

Known limitations

  1. Single-indicator momentum gauge — not a standalone signal.
  2. Wilder vs Cutler difference is significant (do not mix); keep the choice consistent across a graph.
  3. First period values are NaN.
  4. Gaps / trading halts require caller pre-processing.

References

Wilder (1978) original + Cutler (1991) variant. See frontmatter for details.

Golden Test

tests/golden/fixtures/tier1/rsi/, 1e-12 tolerance, passing as of 2026-05-25. Reference: pandas EWM(alpha=1/N, adjust=False) + pandas-ta cross-check; Bloomberg parity 1.4e-14.

Changelog

  • 1.1.0 (2026-05-25) — Promoted to Active as Layer-1 transform; merged rich governance fields from the superseded Layer-0 rsi card.
  • 1.0.0 (2026-05-23) — Initial edge-first Layer-1 Draft card.

Verifiable intelligence for the decisions that demand scrutiny.