2016-11-22 78 views
3

是否有其他人在熊猫新的rolling.std()有问题?不赞成使用的方法是rolling_std()。新方法运行良好,但生成一个不随时间序列滚动的常数。熊猫轧制标准差

示例代码如下。如果您交易股票,您可能会认识到布林通道波段的公式。我从rolling.std()得到的输出一天一天地跟踪股票,显然不是滚动的。

这在熊猫0.19.1。任何帮助,将不胜感激。

import datetime 
import pandas as pd 
import pandas_datareader.data as web 

start = datetime.datetime(2012,1,1) 
end = datetime.datetime(2012,12,31) 
g = web.DataReader(['AAPL'], 'yahoo', start, end) 
stocks = g['Close'] 
stocks['Date'] = pd.to_datetime(stocks.index) 
stocks['AAPL_LO'] = stocks['AAPL'] - stocks['AAPL'].rolling(20).std() * 2 
stocks['AAPL_HI'] = stocks['AAPL'] + stocks['AAPL'].rolling(20).std() * 2 
stocks.dropna(axis=0, how='any', inplace=True) 
+0

你可以添加你实际上是期望的输出? –

+2

'stocks ['AAPL']。rolling(20).std()'给出与'pd.rolling_std(stocks ['AAPL'],window = 20)完全相同的输出'... –

+2

我无法复制在这里:听起来好像你在说股票['AAPL']。rolling(20).std()'是常数,但我看到一个非常数的时变结果。例如,绘图时,2012年7月左右的标记与2012年4月左右的标记相比,我看到了更薄的乐队。 –

回答

0
import pandas as pd 
from pandas_datareader import data as pdr 
import numpy as np 
import datetime 


end = datetime.date.today() 

begin=end-pd.DateOffset(365*10) 

st=begin.strftime('%Y-%m-%d') 

ed=end.strftime('%Y-%m-%d') 


df = pdr.get_data_yahoo("AAPL",st,ed) 






def bollinger_strat(df,window,std): 
    rolling_mean = df['Close'].rolling(window).mean() 
    rolling_std = df['Close'].rolling(window).std() 

    df['Bollinger High'] = rolling_mean + (rolling_std * no_of_std) 
    df['Bollinger Low'] = rolling_mean - (rolling_std * no_of_std) 




bollinger_strat(data,20,2)