diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/risk/__main__.py | 8 | ||||
| -rw-r--r-- | python/risk/indices.py | 36 |
2 files changed, 40 insertions, 4 deletions
diff --git a/python/risk/__main__.py b/python/risk/__main__.py index da0c760b..21f73c4b 100644 --- a/python/risk/__main__.py +++ b/python/risk/__main__.py @@ -9,7 +9,7 @@ from serenitas.utils.pool import dawn_pool from .bonds import subprime_risk, clo_risk, crt_risk, insert_subprime_risk from serenitas.analytics.base import Trade from serenitas.analytics.dates import prev_business_day -from .indices import insert_curve_risk +from .indices import insert_curve_risk, insert_index_risk from .ir_swap import insert_ir_swap_portfolio from .ir_swaption import insert_ir_swaption_portfolio from serenitas.analytics.api import IRSwaption, SofrSwap @@ -38,8 +38,6 @@ mysqlcrt_engine = dbengine("crt") with dawn_pool.connection() as conn: for fund in ("SERCGMAST", "BOWDST", "BRINKER", "ISOSEL"): - portf = get_swaption_portfolio(workdate, conn, source_list=["MS"], fund=fund) - insert_swaption_portfolio(portf, conn) portf = get_tranche_portfolio(workdate, conn, fund=fund) insert_tranche_portfolio(portf, conn) insert_curve_risk( @@ -52,7 +50,9 @@ with dawn_pool.connection() as conn: insert_ir_swaption_portfolio(ir_swaption_portf, conn) ir_swap_portf = SofrSwap.get_portfolio(workdate, fund=fund) insert_ir_swap_portfolio(ir_swap_portf, conn) - + insert_index_risk(workdate, conn, fund) + portf = get_swaption_portfolio(workdate, conn, source_list=["MS"]) + insert_swaption_portfolio(portf, conn) with dbconn("etdb") as etconn, dawn_pool.connection() as dawnconn: subprime = subprime_risk(workdate, dawnconn, mysql_engine) diff --git a/python/risk/indices.py b/python/risk/indices.py index 1d4f338d..267e0181 100644 --- a/python/risk/indices.py +++ b/python/risk/indices.py @@ -143,3 +143,39 @@ def insert_curve_risk( strat_name = "*" if isinstance(strat, tuple) else strat c.execute(sql_str, (d, strat_name, var, "USD", fund)) conn.commit() + + +def insert_index_risk(d: datetime.date, conn: Connection, fund: str = "SERCGMAST"): + df = pd.read_sql_query( + "SELECT * FROM list_cds_positions_by_strat(%s, %s)", + conn, + params=(d, "SERCGMAST"), + ) + to_insert = [] + for t in df.itertuples(index=False): + ind = CreditIndex( + redcode=t.security_id, + maturity=t.maturity, + notional=t.notional, + value_date=d, + ) + ind.mark() + to_insert.append( + ( + d, + fund, + t.security_id, + t.maturity, + t.folder, + t.notional, + ind.factor, + ind.hy_equiv, + ) + ) + with conn.cursor() as c: + c.executemany( + "INSERT INTO index_risk VALUES (%s, %s, %s, %s, %s, %s, %s, %s) " + "ON CONFLICT (date, fund, security_id, maturity, folder) DO UPDATE " + "SET notional=EXCLUDED.notional, index_factor=EXCLUDED.index_factor, hy_equiv=EXCLUDED.hy_equiv", + to_insert, + ) |
