已弃用 (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。
已知局限
- Wilder vs Cutler 差异显著(不要混用)
- 前 14 个 NaN
- 跳空 / 停牌 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 首版

