需要帮助了解和修复熊猫的波动性实施

时间:2018-09-16 09:55:22

标签: python pandas finance quantitative-finance

在书Advances in Financial Machine Learning中,以下代码显示为:

  

getDailyVol计算日内估算点的每日波动率,将span0天的跨度应用于指数加权移动标准差。

def getDailyVol(close,span0=100):
    # daily vol, reindexed to close
    df0 = close.index.searchsorted(close.index-pd.Timedelta(days=1))
    df0 = df0[df0>0]
    line 5: df0 = pd.Series(close.index[df0-1], index=close.index[close.shape[0] - df0.shape[0]])
    df0 = close.loc[df0.index]/close.loc[df0.values].values-1 # daily returns
    df0 = df0.ewm(span=span0).std()
    return df0

但是,当运行此代码并传递带有收盘价的系列时,在第5行中出现以下错误:

TypeError: Index(...) must be called with a collection of some kind, Timestamp('2014-03-04 09:00:14.213000') was passed

现在我的问题是:

  1. 为什么会出现此错误?
  2. 您能否分解代码并逐行解释发生了什么,为什么?我具体不了解的是需要对searchsorted和第5行的索引进行

1 个答案:

答案 0 :(得分:0)

  1. 您是否检查过日期以确保您使用的是日期时间而不是字符串?代码期望dt格式为2018-07-02 08:30:01。

  2. 有点复杂。该书着重介绍了异步的美元柱线。但是,使用固定天数来计算收益。因此,您永远不知道确切要计算多少记录才能计算出回报。该函数的第一行返回行索引,但针对“经过n天后我需要回顾多少记录才能获取第一个记录进行调整。如前所述,这不是常数。

假设您在星期一的9:34:00和9:35:30有酒吧。在星期二,您的酒吧在9:33:50、9:34:10、9:34:20和9:35:40。怎么了?星期一9:34:00与星期二9:34:10(24小时过去后的第一个小节)配对。星期二9:34:20未使用。星期一9:35:30与星期二9:35:40配对。这行代码处理实现此操作所需的行索引。这是一种在异步数据中混合恒定时间增量的聪明方法。

抱歉,请耐心等待。该代码已经过充分测试,并且是正确的。检查您的约会时间,您应该一切顺利。