如何在Python Pandas DataFrame上计算平滑移动平均线(Smoothed Moving Average)
Pandas 计算平滑移动平均线的实现方法
平滑移动平均线(SMMA,也叫平滑移动均线)没有内置的 pandas 专属方法,但可以通过现有 rolling/ewm 接口快速实现,两种常用方案如下:
- 方案1:直接调整ewm参数实现(和标准SMMA计算逻辑完全匹配)
SMMA的递推公式本质是α=1/窗口长度的指数加权平均,只要把ewm的alpha参数设为1/你的窗口长度即可,和你之前用ewm算EMA的用法几乎一致:
# 以窗口长度20为例 df.iloc[:,0].ewm(alpha=1/20, adjust=False).mean()
- 方案2:严格匹配初始值规则的封装方案
如果需要严格遵循SMMA的初始值规则(取前N个样本的算术平均作为第一个SMMA值,再往后递推),可以封装一个极简函数调用:
def calc_smma(data_series, window): # 计算初始SMMA值:前window个数据的简单平均 initial_smma = data_series.rolling(window=window).mean().iloc[window-1] # 按递推规则计算后续所有SMMA值 res = data_series.iloc[window:].ewm(alpha=1/window, adjust=False).mean() # 拼接初始值 return res.shift(1, fill_value=initial_smma) # 调用示例:计算第二列窗口为3的SMMA calc_smma(df.iloc[:,1], window=3)
内容的提问来源于stack exchange,提问作者wwjwjwjwj
相关产品推荐
相关产品推荐

