2016-11-22 81 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)