aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/risk/__main__.py8
-rw-r--r--python/risk/indices.py36
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,
+ )