diff options
Diffstat (limited to 'python/risk')
| -rw-r--r-- | python/risk/tranches.py | 45 |
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 |
