AlphaFeed Blog

Python 算 Stochastic RSI(StochRSI):和 RSI、KDJ 有什么区别?不用 TA-Lib

分析与指标 · 代码验证于 2026-10-20

Python 怎么算 Stochastic RSI(StochRSI)?与 RSI/KDJ 的区别一次讲清

一句话回答: StochRSI 是「对 RSI 再做一次随机指标」——先算 14 日 RSI,再在最近 14 日的 RSI 上取 (RSI−min)/(max−min) 归一到 0~100,最后用 3 日均线平滑成 %K、再平滑成 %D。它比普通 RSI 更灵敏、更快触及超买超卖。用 AlphaFeed 取前复权 K 线后几行 pandas 即可,不用 TA-Lib。实测 600519(贵州茅台)最新:RSI14=63.81,而 StochRSI=95.01、%K=98.34、%D=95.87(RSI 还只是中性偏强,StochRSI 已到超买区)。

为什么会有这个问题 / 传统做法的痛点

RSI 常年在 4060 之间「钝化」,长时间不碰 70/30,让人难以抓到相对高低点。StochRSI 的思路是:不看 RSI 的绝对值,而看它在近期区间里的相对位置,于是把 RSI 的波动「放大」到 0100 满量程,信号更密、更灵敏。代价是更容易假信号。很多人把它和 KDJ 搞混——其实 KDJ 对价格做随机化,StochRSI 对RSI做随机化,输入完全不同。

分步骤解决(每步配可运行代码)

第 1 步:取前复权日线并算 RSI

from alphafeed import AlphaFeed

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

df = af.klines.get("600519.SH", period="1d", count=250,
                   adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)

def rsi(series, n=14):
    delta = series.diff()
    gain = delta.clip(lower=0.0)
    loss = -delta.clip(upper=0.0)
    avg_gain = gain.ewm(alpha=1/n, min_periods=n, adjust=False).mean()
    avg_loss = loss.ewm(alpha=1/n, min_periods=n, adjust=False).mean()
    rs = avg_gain / avg_loss
    return 100 - 100 / (1 + rs)

r = rsi(df["close"], 14)

第 2 步:对 RSI 再做随机指标 → StochRSI

lo = r.rolling(14).min()
hi = r.rolling(14).max()
stochrsi = (r - lo) / (hi - lo) * 100      # 归一到 0~100

k = stochrsi.rolling(3).mean()             # %K:3 日平滑
d = k.rolling(3).mean()                     # %D:对 %K 再平滑

df["rsi"], df["stochrsi"], df["k"], df["d"] = r, stochrsi, k, d
print(round(r.iloc[-1], 2), round(stochrsi.iloc[-1], 2),
      round(k.iloc[-1], 2), round(d.iloc[-1], 2))
# 实测 600519 → 63.81 95.01 98.34 95.87

第 3 步:超买超卖与交叉判读

i = len(df) - 1
if k.iloc[i] > 80:
    print("StochRSI 超买区")
elif k.iloc[i] < 20:
    print("StochRSI 超卖区")
# %K 上穿 %D 偏多,下穿偏空;配合 >80 / <20 区域使用

参数与阈值对照

项取值说明
RSI 周期14先算的基础 RSI 周期
Stoch 回看14在最近 14 日 RSI 上取最高/最低
%K 平滑3对原始 StochRSI 做 3 日均线
%D 平滑3对 %K 再做 3 日均线
超买/超卖80 / 20常用阈值,可按品种调整

StochRSI vs RSI vs KDJ

指标输入做了什么特点
RSI收盘涨跌平均涨幅/平均跌幅平滑、常钝化
KDJ价格高低收价格在区间中的位置对价格随机化
StochRSIRSI 序列RSI 在区间中的位置对 RSI 再随机化,最灵敏

关键坑与注意事项

常见问题(FAQ)

Q:StochRSI 比 RSI 好用吗? A:不是「更好」,是「更灵敏」。它更早给出超买超卖,但假信号也更多,适合与趋势过滤或其他指标组合,而非单独下单。

Q:为什么我的 StochRSI 和软件差很多? A:多半是口径不同——是否乘 100、是否对 %K/%D 平滑、RSI 用 Wilder 还是简单平均。本文 RSI 用 Wilder(ewm(alpha=1/n)),StochRSI 0~100 + 3/3 平滑。

Q:要用复权价吗? A:要,前复权日线。除权跳空会扭曲 RSI 进而扭曲 StochRSI。

Q:需要付费吗? A:免费额度即可取历史日线做计算;批量多标的、更长历史与全市场扫描建议 Starter 及以上,详见官网定价页。

小结

StochRSI 的本质是「把 RSI 再放进随机指标里,看它在近期区间的相对位置」,从而把钝化的 RSI 放大到满量程、提高灵敏度。只要有一份干净的前复权 K 线,几行 pandas 就能复现,AlphaFeed 负责把可靠数据取回来。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。