В книге Достижения в области финансового машинного обучения приведен код ниже с описанием:
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
Теперь мои вопросы:
- Почему я получаю эту ошибку?
- Можете ли вы разбить код и построчно объяснить, что происходит и почему? В частности, я не понимаю необходимости поиска и индексации в строке 5.