【问题标题】:Python Pandas: Calculating exponentially weighted lagged squared returns (variance)Python Pandas:计算指数加权滞后平方收益(方差)
【发布时间】:2017-07-12 13:54:07
【问题描述】:

我正在尝试实施 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.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
                ...

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

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

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

【问题讨论】:

    标签: python pandas exponential moving-average volatility


    【解决方案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
    

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

    【讨论】:

    • 嗨@error,感谢您的输入。如果我遗漏了一些东西,请原谅我,但我的理解是,将np.sqrt(261) * returns.ewm(com=60).std() 应用于这个移位的数据将无法满足等式,因为虽然回报已经发生了变化,但计算出的世博加权平均数也发生了变化。理想情况下,我需要能够将当前时间步的平均值与前一个时间步的返回值相加
    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2019-09-27
    • 2013-11-28
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多