Я пытаюсь реализовать инвестиционную стратегию 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.ewm
в сочетании с pd.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, который я выполнил выше, не будет использовать отложенный возврат, а вместо этого будет использовать возврат на текущем временном шаге? Таким образом, мне нужно будет запрограммировать свой собственный способ расчета этого в Pandas? Возможно, используя какой-то сдвиг?
Заранее спасибо! Я все еще разбираюсь с нюансами Pandas, и ваша помощь очень ценится.