BollingerBand - rolling_mean - 长度数

时间:2016-02-04 17:30:21

标签: python pandas variable-length

我对布林带有疑问。 在下面的代码中,只有在长度为“1”时才会出现结果。但是,给长度1是不合逻辑的。

dataframe = pd.DataFrame(data = speed)   
length=2    
def bbands(data, length, numsd=2):    
    ave = pd.stats.moments.rolling_mean(data,length)    
    sd = pd.stats.moments.rolling_std(data,length)    
    upband = ave + (sd*2)    
    dnband = ave - (sd*2)    
    print 'ave:', ave    
    print 'sd:', sd    
    print np.round(ave,3), np.round(upband,3), np.round(dnband,3)    

print bbands(dataframe, length=10, numsd=1)    
print speed    
dataframe['ave'], dataframe['upper'], dataframe['lower'] = bbands(dataframe, length, numsd=1)    
dataframe.plot()

当我参加任何数字而不是长度为“1”时,“ave”计算为以下结果。 (我给3长度,如果我增加长度数,NaN的数量也增加)

[1440 rows x 1 columns]          0
0      NaN
1      NaN
2   92.250
3   92.254
4   92.459
5   93.639
6   94.250
.....

1 个答案:

答案 0 :(得分:1)

第一个rolling_mean值显示rolling_stdNaN返回length - 1。这是有道理的,因为它一次使用length值来计算这些值。您可以从结果数据框中过滤出NaN

ave = pd.stats.moments.rolling_mean(data,length)
ave = ave.dropna()

sd = pd.stats.moments.rolling_std(data,length)
sd = sd.dropna()