如何使用Pandas计算布林带Z分数(Bollinger Z-score)?
使用Pandas计算布林带Z分数
根据你给出的公式 zs = (data - SMA(data, n=20)) / SD(data, n=20),可以用Pandas的滚动窗口方法直接实现,步骤如下:
- 计算20期简单移动平均(SMA):使用
rolling(window=20).mean()方法 - 计算20期标准差(SD):使用
rolling(window=20).std()方法,默认是样本标准差(除以n-1);若需总体标准差(除以n),需添加参数ddof=0 - 代入公式得到Z分数
完整代码实现
# 假设series是已有的pandas.Series类型变量(数据类型float64) import pandas as pd # 计算20期简单移动平均 sma_20 = series.rolling(window=20).mean() # 计算20期标准差(默认样本标准差) std_20 = series.rolling(window=20).std() # 计算布林带Z分数 z_score = (series - sma_20) / std_20
注意事项
- 由于滚动窗口需要至少20个数据点,结果中前19个值会是
NaN,属于正常情况 - 若业务要求使用总体标准差,修改标准差计算代码为:
std_20 = series.rolling(window=20).std(ddof=0)
内容的提问来源于stack exchange,提问作者Asclepius
相关产品推荐
相关产品推荐

