Python Pandas:计算指数加权滞后平方回报(方差)

时间:2017-07-12 13:54:08

标签: python pandas exponential moving-average volatility

我正在尝试实施AQR投资策略“时间序列动力”:https://www.aqr.com/library/journal-articles/time-series-momentum

我在部分过程中遇到了一些困惑/麻烦。乍一看,Pandas似乎具有计算关键指标的功能,即“指数加权滞后平方收益”,作为衡量金融工具波动性的指标。因此公式(有一些背景):

exponentially weighted lagged squared returns

我理解Pandas有一些功能可以将上面的公式(1)应用到时间序列中。例如,未来合同的每日回报可以是:

[In]: returns

[Out]:

Date
1984-01-03   -0.007299
1984-01-04    0.003614
1984-01-05   -0.007318
1984-01-06   -0.004134
1984-01-09    0.009487
1984-01-10   -0.000896
                ...

然后我将pandas.DataFrame.ewmpd.std()结合使用,尝试在快速单行中实现所需的公式,设置com=60以匹配论文,这会产生:

[In]: np.sqrt(261) * returns.ewm(com=60).std()

[Out]:

Date
1984-01-03         NaN
1984-01-04    0.124664
1984-01-05    0.101879
1984-01-06    0.082925
1984-01-09    0.120588
1984-01-10    0.107411
                ...

虽然这似乎没问题......虽然本文中的公式使用之前滞后回报的值与指数加权平均回报之间的差异计算中当前时间步长:

enter image description here

我是否正确地说我上面执行的Pandas方法不会使用滞后返回,而是使用当前时间步的返回值?因此,我需要在Pandas中编写自己的计算方法吗?也许通过某种转变?

提前致谢!我仍然在掌握熊猫的细微差别,非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用数据框shift方法。

df['shift'] = df['column to shift'].shift(-1)

这将向后移动column to shift 1步。因此shift第1行的值等于column to shift等第2行的值。对于最后一行,将推算NaN。

喜欢这样。

    column to shift shift
0   4   1.0
1   1   1.0
2   1   3.0
3   3   4.0
4   4   2.0
5   2   3.0
6   3   2.0
7   2   2.0
8   2   2.0
9   2   NaN

这应该足以创建您想要使用的公式。