2016-11-22 5 views
3

Hat jemand sonst Probleme mit dem neuen rolling.std() in Pandas? Die veraltete Methode war rolling_std(). Die neue Methode läuft gut, erzeugt aber eine konstante Zahl, die nicht mit den Zeitreihen übereinstimmt.Pandas Rolling Standardabweichung

Beispielcode ist unten. Wenn Sie Aktien handeln, können Sie die Formel für Bollinger Bänder erkennen. Die Ausgabe, die ich von rolling.std() bekomme, verfolgt die Aktie Tag für Tag und ist offensichtlich nicht im Rollen.

Diese in den Pandas 0.19.1. Jede Hilfe wäre willkommen.

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

können Sie die Ausgabe addieren Sie eigentlich erwartet? –

+2

'stocks ['AAPL']. Rolling (20) .std()' gibt genau die gleiche Ausgabe wie 'pd.rolling_std (Stocks ['AAPL'], window = 20)' ... –

+2

kann ich nicht reproduzieren hier: es klingt, als ob du "stocks ['AAPL'] sagst. rolling (20) .std()' ist konstant, aber ich sehe ein nicht konstantes, zeitlich variierendes Ergebnis. Zum Beispiel, Plotten, sehe ich viel dünnere Bands um die Juli 2012 Marke von denen um April 2012. –

Antwort

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)