2016-05-02 2 views
2

私はPandasを使ってPythonでKaufman効率比(ER)を実装しようとしています。パンダとPythonでカウフマンの効率比を計算する?

  1. 株式の
  2. 終値(この例では、ドイツのDAX指数、^ GDAXI、):
 
    Date  Close 
    2016-01-05 10310.10 
    2016-01-06 10214.02 
    2016-01-07 9979.85 
    2016-01-08 9849.34 
    2016-01-11 9825.07  
    2016-01-12 9985.43  
    2016-01-13 9960.96  
    2016-01-14 9794.20 
パンダDATAFRAMEで

、私は2つの列を持っています

私が必要とするのは、所与の期間nのERを含む第3列です。 ERの

定義:

ER = Direction/Volatility 

:ここ

Direction = ABS (Close – Close[n]) 
Volatility = n * ∑ (ABS(Close – Close[1])) 
n = The efficiency ratio period. 

は(http://etfhq.com/blog/2011/02/07/kaufmans-efficiency-ratio/から採取)= 3期間ERの例である:

ER-Calculation

私が苦労しているのは、PandasでPythonでこれを行う方法です。最後に は、私のデータフレームは、上記の計算によると、次のようになります。

 
Date  Adj Close ER(3) 
2016-01-04 10283.44  
2016-01-05 10310.10  
2016-01-06 10214.02  
2016-01-07 9979.85  0.9 
2016-01-08 9849.34  1.0 
2016-01-11 9825.07  1.0 
2016-01-12 9985.43  0.0 
2016-01-13 9960.96  0.5 
2016-01-14 9794.20  0.1 

どのように私はパンダがERに必要な計算のために、以前のn行に戻って見て作るのですか?

ご協力いただきありがとうございます。 ありがとうございます。 ディルク

+1

あなたが本当に試したように見えません。あなたは少なくともあなたのデータをパンダのデータフレームに入れていますか?その場合は、例としてスライスを表示してください。そして、その例の出力が何であるかを示します。 – IanS

+0

こんにちはIan、データフレームスライスを追加していただきありがとうございます。それに応じて更新された投稿。私は試してみました.Pandasの基本機能(ローリング)は大丈夫ですが、自分でローリング機能を作成する方法については頭を悩ますことはできません。 – user1653205

答えて

3

ローリング関数を記述する必要はありませんが、ちょうどdiffrolling_sumを使用します。

df['direction'] = df['Close'].diff(3).abs() 
df['volatility'] = pd.rolling_sum(df['Close'].diff().abs(), 3) 

私は、コードはかなり自明だと思います。あなたが説明をしたいのなら教えてください。

In [11]: df['direction']/df['volatility'] 
Out[11]: 
0   NaN 
1   NaN 
2   NaN 
3 1.000000 
4 1.000000 
5 0.017706 
6 0.533812 
7 0.087801 
dtype: float64 

これはあなたが探しているもののようです。

+1

うれしい私は助けることができます。次回は、書いたコードとエラーメッセージも含めてください。あなたが試してみたら、人々は助けてくれるでしょう。 – IanS

関連する問題