diff options
| -rw-r--r-- | python/risk/bonds.py | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/python/risk/bonds.py b/python/risk/bonds.py index 0140de5e..b15ed2bf 100644 --- a/python/risk/bonds.py +++ b/python/risk/bonds.py @@ -230,24 +230,33 @@ def get_portfolio(date, conn, asset_class: AssetClass, fund="SERCGMAST"): return df.set_index("cusip") -def crt_risk(date, dawn_conn, crt_engine, model_date=None, 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) - if model_date is None: - sql_string = ( - "SELECT distinct timestamp FROM priced_at_market " - "where model_des = 'base' " - "AND timestamp BETWEEN %s AND date_add(%s, INTERVAL 1 DAY) order by timestamp desc" - ) - with crt_engine.connect() as c: - r = c.execute(sql_string, (date - datetime.timedelta(days=15), date)) - (model_date,) = r.fetchone() + scen = { + datetime.date(2019, 5, 31): "base", + datetime.date(2020, 1, 29): "hpi3_ir3", + datetime.date(2020, 3, 18): "hpi4_ir3", + datetime.date(2020, 10, 20): "hpi5_ir3", + datetime.date(3000, 1, 1): "econ6_ir3", + } + scen_type = None + for d, s in scen.items(): + if scen_type == None and date < d: + scen_type = s + sql_string = ( + "SELECT distinct timestamp FROM priced_at_market " + "where model_des = %s " + "AND timestamp BETWEEN %s AND date_add(%s, INTERVAL 1 DAY) order by timestamp desc" + ) + with crt_engine.connect() as c: + r = c.execute(sql_string, (scen_type, date - datetime.timedelta(days=15), date)) + (model_date,) = r.fetchone() df_model = pd.read_sql_query( - "SELECT * from priced_at_market WHERE " - "timestamp BETWEEN %s AND date_add(%s, INTERVAL 1 DAY) ", + "SELECT * from priced_at_market WHERE timestamp = %s", crt_engine, "cusip", - params=(model_date, model_date), + params=(model_date,), ) if any(~df_model["delta.ir"].isna()): df_model = df_model[~df_model["delta.ir"].isna()] |
