在书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
现在我的问题是:
答案 0 :(得分:0)
您是否检查过日期以确保您使用的是日期时间而不是字符串?代码期望dt格式为2018-07-02 08:30:01。
有点复杂。该书着重介绍了异步的美元柱线。但是,使用固定天数来计算收益。因此,您永远不知道确切要计算多少记录才能计算出回报。该函数的第一行返回行索引,但针对“经过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配对。这行代码处理实现此操作所需的行索引。这是一种在异步数据中混合恒定时间增量的聪明方法。
抱歉,请耐心等待。该代码已经过充分测试,并且是正确的。检查您的约会时间,您应该一切顺利。