Skip to content

已弃用 (2026-05-25) —— 该算子是 Layer-1 变换、非 Layer-0 原子输入,已并入 compute_rsi_v1。保留作历史。

做什么(One-liner)

RSI 相对强弱指数,默认 Wilder's RMA smoothing(对标 Bloomberg 1.4e-14),可选 Cutler's SMA。库级 primitive。

怎么用

python
from services.algo.technical import compute_rsi
compute_rsi(prices, period=14)                       # Wilder 默认
compute_rsi(prices, period=14, smoothing='sma')      # Cutler's

核心公式

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)

假设与适用场景

假设:Wilder's 是 canonical(大部分 terminal + TradingView 默认)+ 除零 → 100 + 前 period 个 NaN。

适用:超买超卖、divergence、momentum feature。

不适用:intraday tick、<15 日、横盘 whipsaw。

已知局限

  1. Wilder vs Cutler 差异显著(不要混用)
  2. 前 14 个 NaN
  3. 跳空 / 停牌 caller 预处理

参考文献

Wilder (1978) 原始 + Cutler (1991) 变体。详见 frontmatter。

Golden Test

tests/golden/fixtures/tier1/rsi/ (Wilder) + rsi_cutler/ (SMA),1e-12 tolerance,2026-04-20 passing。2026-04-20 PR #20 切换默认到 Wilder 后 Bloomberg parity 1.4e-14。

Changelog

  • 1.1.0 (2026-04-20) — 默认切换到 Wilder's;Cutler's 保留 smoothing='sma' 可选项
  • 1.0.0 (2026-04-19) — Cutler's SMA 首版

Verifiable intelligence for the decisions that demand scrutiny.