Нужна помощь в понимании и исправлении волатильности панд - PullRequest
0 голосов
/ 16 сентября 2018

В книге Достижения в области финансового машинного обучения приведен код ниже с описанием:

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

1 Ответ

0 голосов
/ 10 ноября 2018
  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. Эта строка кода обрабатывает индексы строк, необходимые для этого. Это умный метод для смешивания постоянных времени дельты в асинхронных данных.

Извините, что долго выдохся. Код был хорошо протестирован и является надежным. Проверьте дату и вам будет хорошо идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...