aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/risk/bonds.py16
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