web-dev-qa-db-fra.com

Pandas écart-type glissant

Quelqu'un d'autre a-t-il des problèmes avec la nouvelle rolling.std() dans les pandas? La méthode obsolète était rolling_std(). La nouvelle méthode fonctionne correctement mais produit un nombre constant qui ne correspond pas à la série chronologique.

Un exemple de code est ci-dessous. Si vous négociez des actions, vous pouvez reconnaître la formule des bandes de Bollinger. La sortie que j'obtiens de rolling.std() suit le stock au jour le jour et ne roule évidemment pas.

Ceci en pandas 0.19.1. Toute aide serait appréciée.

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)
9
Sam
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')


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

def bollinger_strat(data, window, no_of_std):
    rolling_mean = data['Close'].rolling(window).mean()
    rolling_std = data['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)
8
Abhishek Kulkarni