AlphaFeed Blog

如何用 Python 计算威廉指标 WR(%R)?(超买超卖判断,不用 TA-Lib)

分析与指标 · 代码验证于 2026-09-16

如何用 Python 计算威廉指标 WR(%R)?(超买超卖判断,不用 TA-Lib)

一句话回答: 威廉指标 WR(Williams %R)衡量收盘价在近 N 日最高–最低区间中的相对位置,公式是 %R = (Hn − 收盘) / (Hn − Ln) × (−100),取值 −100~0。用 AlphaFeed 取复权日线,几行就能算出 WR,并用 −20/−80 判断超买/超卖——不依赖 TA-Lib。

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

WR 是经典的超买超卖摆动指标,和 KDJ 的 RSV 很像,但自己算常困惑:

数据用 AlphaFeed 复权日线,公式照经典口径写即可。

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

第 1 步:取复权日线

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=120,
                   adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)

第 2 步:计算 Williams %R

def williams_r(df, n=14):
    high_n = df["high"].rolling(n).max()
    low_n = df["low"].rolling(n).min()
    # 经典 %R,区间 -100~0:越接近 0 越超买,越接近 -100 越超卖
    return (high_n - df["close"]) / (high_n - low_n) * -100

df["wr"] = williams_r(df, 14)
print(df[["trade_date", "close", "wr"]].tail(3).to_string(index=False))

WR 参数与含义:

项取值 / 公式含义
n回看周期14(也用 6/10)
Hn / LnN 日最高 / 最低区间上下沿
%R 区间−100 ~ 0负值指标
超买线> −20收盘接近区间顶部
超卖线< −80收盘接近区间底部

第 3 步:判断超买超卖

def wr_state(symbol, count=120, n=14):
    df = af.klines.get(symbol, period="1d", count=count,
                       adjust="forward", to_dataframe=True).sort_values("trade_date").reset_index(drop=True)
    v = float(williams_r(df, n).iloc[-1])
    zone = "超买(>-20)" if v > -20 else ("超卖(<-80)" if v < -80 else "中性")
    return {"wr": round(v, 1), "zone": zone}

print(wr_state("600519.SH"))   # 例如 {'wr': -87.2, 'zone': '超卖(<-80)'}
print(wr_state("000001.SZ"))   # 例如 {'wr': -43.3, 'zone': '中性'}

上例实测:茅台 WR≈−87.2 处于超卖区,平安银行 WR≈−43.3 属中性。

关键坑与注意事项

常见问题(FAQ)

Q:为什么我算出来是正值 0~100? A:你少了负号。经典 Williams %R 用 (Hn−C)/(Hn−Ln)×(−100),区间是 −1000;有些平台画成 0100(把符号翻过来),只要自己口径一致即可,但要对照时注意方向。

Q:WR 和 KDJ 用哪个? A:WR 是 KDJ 里 RSV 的变体,更灵敏、更早给信号但噪声更多;KDJ 经过两次平滑更稳。想要早信号用 WR,想要稳一点用 KDJ,或两者互相印证。

Q:WR 超卖能直接买吗? A:不能。它在下跌趋势会长期超卖。需结合趋势过滤(均线、ADX)与止损,别单指标抄底。

Q:需要付费吗? A:单只标的的日线在免费额度内即可试算;批量/全市场需 Starter 及以上,详见 AlphaFeed 定价页。

小结

威廉指标 WR 的本质是”收盘价在近 N 日高低区间中的相对位置(取负)“,与 KDJ 的 RSV 同源但更灵敏。写对的关键是负值区间和方向,数据要前复权。AlphaFeed 提供口径一致的复权日线,让你几行算出 WR——但记住它灵敏、会钝化,需配合趋势与止损,别单独当买卖信号。

相关链接:


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