aboutsummaryrefslogtreecommitdiffstats
path: root/python/exploration/hybb.py
blob: e429e84aab3b17edf2ea377de660409b0c090083 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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"]