WR - 威廉指标
1 公式
威廉指标的计算公式为:
其中:
𝐻𝑛 是过去n日内的最高价。
𝐿𝑛 是过去n日内的最低价。
𝐶 是当前收盘价。
2 数据准备
我们以科创50指数 000688 为例,指数开始日期为2019-12-31,数据格式如下:
3 计算过程
def wr(df: pd.DataFrame, N=10) -> pd.DataFrame:
"""
计算威廉指标(Williams %R)并处理可能的除零错误.
参数:
----------
df : pd.DataFrame
包含至少 'high', 'low' 和 'close' 列的DataFrame,分别表示每个周期的最高价、最低价和收盘价。
N : int, 可选
用于计算滚动窗口的周期数,默认值为10。
返回值:
-------
data : pd.DataFrame
原始DataFrame加上'Hn'(周期内最高价)、'Ln'(周期内最低价)和'WR'(威廉指标)三列。
"""
# 创建一个df的副本以避免修改原始数据
data = df.copy()
# 使用rolling方法计算N周期内的最高价
data['Hn'] = data['high'].rolling(N).max()
# 使用rolling方法计算N周期内的最低价
data['Ln'] = data['low'].rolling(N).min()
# 获取浮点数的最小正数值,以防分母为零
epsilon = np.finfo(float).eps
# 计算威廉指标(Williams %R)
# 公式为:(Hn - close) / (Hn - Ln) * 100
# 在分母中加入epsilon以避免除零错误
data['WR'] = (data['Hn'] - data['close']) / (data['Hn'] - data['Ln'] + epsilon) * 100
# 返回包含计算结果的新DataFrame
return data
4 注意事项
WR计算结果与东方财富软件中的值一致,与雪球中的值有差异。