2016-07-25 15 views
0

私はfollowing方法で計算された平均(EMA)の移動指数関数に慣れています:使用パンダとEWMA

SMA: 10 period sum/10 

Multiplier: (2/(Time periods + 1)) = (2/(10 + 1)) = 0.1818 (18.18%) 

EMA: {Close - EMA(previous day)} x multiplier + EMA(previous day). 

はまだ私は、このアプローチに一致する出力が表示されないpd.ewma(df['Close'])を実行したとき。

次のコードは、私が期待している答えを示していますが、実行に少し時間がかかります。

誰でも私が期待している出力を与えるためにこのライブラリを活用する正しい方法は何ですか?

import pandas.io.data as web 

import datetime 
import pandas as pd 
start = datetime.datetime(2010, 1, 1) 

end = datetime.datetime.today() 
f = web.DataReader("SPY", 'yahoo', start, end) 
f['sma']=pd.rolling_mean(f['Adj Close'],10) 
days=10. 
alpha=(2./(days+1.)) 
d={} 

for x in f[(f['sma']>0)].index: 
    if len(d)==0: 
     d[x] = f[(f.index==x)]['sma'].values[0] 
    else: 
     d[x] = (f[(f.index==x)]['Adj Close'].values[0] - d[dt_prior])*alpha + d[dt_prior] 

    dt_prior = x 
pd.Series(d) 
+1

コードが定数更新Webサービスからデータを読み取っているようです。期待どおりの結果と実際の結果で、最小限の再現可能な例をいくつか提供できますか? – Mephy

答えて

1

あなたはあなた自身でほぼそこにいたと思います。

e = f['Adj Close'].ewm(span=10, min_periods=10) 

あなたが探しているものが生成されます。 forループの結果と正確に一致するようにするには、adjust = Trueと他のparametersを使用する必要があります。しかし、あなたは

e.tail(10) 
d.tail(10) 

を比較する場合は、EWMAの(おそらく異なる)の出発点は、もはや問題ではないと、最新の結果が完全に一致していることがわかります。

関連する問題