用 Pandas 在 Python 中计算考夫曼的效率比?

use*_*205 3 python pandas

我正在尝试使用 Pandas 在 Python 中实现考夫曼效率比 (ER)。

在 Pandas DataFrame 中,我有两列:

  1. 日期
  2. 股票的收盘价(在本例中为德国 DAX 指数,^GDAXI):
    日期 关闭
    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

我需要的是包含给定时期 n 的 ER 的第三列。

ER的定义:

ER = Direction / Volatility
Run Code Online (Sandbox Code Playgroud)

在哪里:

Direction = ABS (Close – Close[n])
Volatility = n * ? (ABS(Close – Close[1]))
n = The efficiency ratio period.
Run Code Online (Sandbox Code Playgroud)

这是 an=3 周期 ER 的示例(取自http://etfhq.com/blog/2011/02/07/kaufmans-efficiency-ratio/):

ER-计算

我正在苦苦挣扎的是如何用 Pandas 在 Python 中做到这一点?最后,根据上面的计算,我的数据框应该是这样的:

日期调整关闭 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

如何让 Pandas 回顾前 n 行以进行 ER 所需的计算?

任何帮助是极大的赞赏!先感谢您。短剑

Ian*_*anS 6

无需编写滚动函数,只需使用diffand rolling_sum

df['direction'] = df['Close'].diff(3).abs()
df['volatility'] = pd.rolling_sum(df['Close'].diff().abs(), 3)
Run Code Online (Sandbox Code Playgroud)

我认为代码是不言自明的。如果您需要解释,请告诉我。

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
Run Code Online (Sandbox Code Playgroud)

这看起来像你要找的东西。