aboutsummaryrefslogtreecommitdiffstats
path: root/python/risk/__main__.py
blob: 35228f2001962712b644664dd494330a235f6a58 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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)