from analytics import on_the_run from analytics.basket_index import BasketIndex from analytics.utils import bus_day from analytics.index_data import index_returns import datetime import numpy as np import pandas as pd dr = pd.date_range("2015-09-27", "2019-11-25", freq=bus_day) prices = {} s = -1 index_list = [] for d in dr: print(d) otr = on_the_run("HY", d) if otr > s: s = otr index_list.append(BasketIndex("HYBB", s, ["5yr"], value_date=d)) for index in index_list: index.value_date = d prices[(index.series, d)] = 100 * (1 - index.pv()["5yr"]) hybb = pd.DataFrame.from_dict(prices, orient="index") hybb.index = pd.MultiIndex.from_tuples(hybb.index) breakpoint() hybb.columns = ["HYBB"] hybb = hybb.pct_change().reset_index(level=0, drop=True) df = index_returns( index="HY", tenor="5yr", series=[25, 26, 27, 28, 29, 30, 31, 32, 33], from_date=datetime.date(2015, 9, 27), years=None, ) hy_returns = df["price_return"].groupby("date").nth(-1) hy_returns.name = "HY" returns = pd.concat([hybb["HYBB"], hy_returns], axis=1) # weekly beta_weekly = ( returns.ewm(span=5).cov().groupby(level=0).apply(lambda df: df / np.diag(df)) ) beta_weekly = beta_weekly.xs("HY", level=1)["HYBB"] ## monthly beta_monthly = ( returns.ewm(span=20).cov().groupby(level=0).apply(lambda df: df / np.diag(df)) ) beta_monthly = beta_monthly.xs("HY", level=1)["HYBB"]