1

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

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

指数加权滞后平方收益

我了解 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.ewm结合使用pd.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
                ...

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

在此处输入图像描述

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

提前致谢!我仍在掌握 Pandas 的细微差别,非常感谢您的帮助。

4

1 回答 1

1

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

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

这将column to shift向后移动 1 步。因此,shift第 1 行的值等于第 2 行的值,column to shift以此类推。对于最后一行,将估算 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

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

于 2017-07-12T18:40:40.420 回答