diff options
| -rw-r--r-- | python/risk/bonds.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/python/risk/bonds.py b/python/risk/bonds.py index be44dbd9..5235dad9 100644 --- a/python/risk/bonds.py +++ b/python/risk/bonds.py @@ -83,6 +83,7 @@ def get_df(date, engine, *, zero_factor=False): def subprime_risk(pos_date, conn, engine, model_date=None, fund="SERCGMAST"): + analytics.init_ontr(pos_date) if model_date is None: sql_string = ( "SELECT distinct timestamp::date FROM priced " @@ -100,7 +101,7 @@ def subprime_risk(pos_date, conn, engine, model_date=None, fund="SERCGMAST"): df_pv.columns = ["pv1", "pv2", "pv3"] df_pv_perct = df.xs("PV", axis=1, level=0) df_pv_perct.columns = ["pv5", "pv25", "pv50", "pv75", "pv95"] - df_modDur = df[("modDur", 1)] + df_modDur = df[("modDur", 1)].where(df[("modDur", 1)] < 30, 30) df_modDur.name = "modDur" df_v1 = df.xs(1, axis=1, level="model_version")[ ["pv_RnW", "delta_mult", "delta_hpi", "delta_ir"] @@ -135,6 +136,7 @@ def subprime_risk(pos_date, conn, engine, model_date=None, fund="SERCGMAST"): df_calc = df_pos.join(df_risk) yc = YC(evaluation_date=pos_date) + df_calc = df_calc.assign( bond_yield=df_calc.modDur.apply( lambda x: x if np.isnan(x) else float(yc.zero_rate(x)) @@ -229,6 +231,7 @@ def get_portfolio(date, conn, asset_class: AssetClass, fund="SERCGMAST"): def crt_risk(date, dawn_conn, crt_engine, fund="SERCGMAST"): + analytics.init_ontr(date) df = get_portfolio(date, dawn_conn, AssetClass.CRT, fund) df_model = pd.read_sql_query( "SELECT * from priced_at_market WHERE " @@ -247,8 +250,15 @@ def crt_risk(date, dawn_conn, crt_engine, fund="SERCGMAST"): * analytics._beta["CRT"] * df.curr_ntl ) - delta = {"CRT_SD": 1.0, "CRT_LD": 1.5, "CRT_LD_JNR": 3.0} - df.hy_equiv *= df["strategy"].replace(delta) + delta = pd.read_sql_query( + "SELECT distinct on (strategy) " + "strategy, beta_crt from beta_crt WHERE " + "date <= %s ORDER BY strategy, date desc", + dawn_conn, + index_col="strategy", + params=(date,), + ) + df.hy_equiv *= df["strategy"].replace(delta.beta_crt.to_dict()) return df |
