aboutsummaryrefslogtreecommitdiffstats
path: root/python/risk
diff options
context:
space:
mode:
Diffstat (limited to 'python/risk')
-rw-r--r--python/risk/tranches.py45
1 files changed, 31 insertions, 14 deletions
diff --git a/python/risk/tranches.py b/python/risk/tranches.py
index 2c13daf7..4b13dc22 100644
--- a/python/risk/tranches.py
+++ b/python/risk/tranches.py
@@ -1,16 +1,33 @@
-from db import dbconn, dbengine
from analytics import Portfolio, DualCorrTranche
-import datetime
-import pandas as pd
+import logging
-sql_string = ("SELECT id, sum(notional * case when protection='Buyer' then -1 else 1 end) "
- "OVER (partition by security_id, attach) AS ntl_agg "
- "FROM cds WHERE swap_type='CD_INDEX_TRANCHE' AND termination_cp IS NULL")
-conn = dbconn('dawndb')
-with conn.cursor() as c:
- c.execute(sql_string)
- trade_ids = [dealid for dealid, ntl in c if ntl != 0]
-portf = Portfolio([DualCorrTranche.from_tradeid(dealid) for dealid in trade_ids],
- trade_ids)
-portf.value_date = datetime.date(2018, 10, 10)
-portf.mark()
+logger = logging.getLogger(__name__)
+
+def get_tranche_portfolio(date, conn, by_strat=False):
+ if by_strat:
+ sql_string = "SELECT * from list_tranche_positions_by_strat(%s)"
+ else:
+ sql_string = "SELECT dealid from list_tranche_positions(%s)"
+ with conn.cursor() as c:
+ c.execute(sql_string, (date,))
+ if by_strat:
+ trade_ids = list(c)
+ else:
+ trade_ids = [dealid for dealid, in c]
+ if by_strat:
+ portf = Portfolio([DualCorrTranche(redcode=d['security_id'],
+ maturity=d['maturity'],
+ notional=d['notional'],
+ tranche_running=d['fixed_rate']*100,
+ attach=d['orig_attach'],
+ detach=d['orig_detach'],
+ corr_attach=None, corr_detach=None) for d in trade_ids])
+ portf.trade_ids = [(d["folder"],
+ f"{t.index_type} {t.series} {t.tenor} {t.attach}-{t.detach}")
+ for d, t in zip(trade_ids, portf.trades)]
+ else:
+ portf = Portfolio([DualCorrTranche.from_tradeid(dealid) for dealid in trade_ids],
+ trade_ids)
+ portf.value_date = date
+ portf.mark()
+ return portf