Историческая волатильность цен многих разных облигаций в одном столбце [closed]

У меня есть файл csv с ценами покупки и продажи многих облигаций (с использованием идентификаторов ISIN) за последний год. Используя эти исторические цены, я пытаюсь рассчитать историческую волатильность для каждой облигации. Хотя обычно это должно быть несложной задачей, проблема заключается в том, что не все облигации имеют одинаковое количество дней данных о торговых ценах. Следовательно, если мне нужно рассчитать скользящее стандартное отклонение, я не могу выбрать стандартное скользящее окно в 252 дня в течение 1 года.

Набор данных имеет следующий формат:

| BusinessDate | ISIN | Ставка | Спросите | | ———— | —— | —— | —- | | Дата 1 | ISIN1 | P1 | P2 | | Дата 2 | ISIN1 | P1 | P2 | | Дата 252 | ISIN1 | P1 | P2 | | Дата 1 | ISIN2 | P1 | P2 | | Дата 2 | ISIN2 | P1 | P2 | ……

& скоро.

Мой текущий код выглядит следующим образом:

vol_df = pd.read_csv('hist_prices.csv')
vol_df['BusinessDate'] = pd.to_datetime(vol_df['BusinessDate'])
vol_df[Mid Price'] = vol_df[['Bid', 'Ask']].mean(axis = 1)
vol_df['log_return'] = vol_df.groupby('ISIN')['Mid Price'].apply(lambda x: np.log(x) - np.log(x.shift(1)))
vol_df['hist_vol'] = vol_df['log_return'].std() * np.sqrt(252)

Кажется, что последняя строка кода дает все значения NaN в столбце. Я попытался заменить последнюю строку, чтобы использовать Rolling_std-

vol_df.set_index('BusinessDate').groupby('ISIN').rolling(window = 1, freq = 'A').std()['log_return']

Но это тоже не помогает. Есть какие-нибудь подсказки о том, как я могу разобраться в этом?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *