import os import argparse import datetime from quantlib.time.api import Date from quantlib.time.calendars.united_states import UnitedStates, Market from serenitas.utils.db import dbengine from serenitas.utils.db2 import dbconn 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.config import C from serenitas.analytics.dates import prev_business_day from serenitas.analytics.utils import run_local 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 from .swaptions import get_swaption_portfolio, insert_swaption_portfolio from .tranches import ( get_tranche_portfolio, insert_tranche_risk, insert_tranche_pnl_explain, ) os.environ["SERENITAS_APP_NAME"] = "risk" parser = argparse.ArgumentParser() parser.add_argument( "cob", nargs="?", type=datetime.date.fromisoformat, default=prev_business_day(datetime.date.today()), help="close of business date", ) args = parser.parse_args() workdate = args.cob Trade.init_ontr(workdate) C.include_todays_cashflows = True C.local = False mysql_engine = dbengine("rmbs_model") mysqlcrt_engine = dbengine("crt") funds = ("SERCGMAST", "BOWDST", "BRINKER", "ISOSEL") us_cal = UnitedStates(Market.FederalReserve) with dawn_pool.connection() as conn: for fund in funds: insert_curve_risk( workdate, conn, fund, ("SER_IGCURVE", "SER_ITRXCURVE", "XCURVE", "SER_HYCURVE"), ) if us_cal.is_business_day(Date.from_datetime(workdate)): ir_swaption_portf = IRSwaption.get_portfolio(workdate, fund=fund) 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_tranche_portfolio(workdate, conn, funds=funds) with run_local(): insert_tranche_pnl_explain(portf, conn) insert_tranche_risk(portf, conn) 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) insert_subprime_risk(subprime, dawnconn) clo = clo_risk(workdate, dawnconn, etconn) crt = crt_risk(workdate, dawnconn)