diff options
Diffstat (limited to 'python/risk')
| -rw-r--r-- | python/risk/indices.py | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/python/risk/indices.py b/python/risk/indices.py index 3aaabcf9..8ffe20b2 100644 --- a/python/risk/indices.py +++ b/python/risk/indices.py @@ -16,10 +16,11 @@ def get_index_portfolio( include_strategies: Union[str, None] = None, exclude_strategies: Union[str, None] = None, exclude_redcode: Iterable[str] = (), + by_strat: bool = True, **kwargs, ): sql_str = ( - "SELECT security_id AS redcode, sum(notional) AS notional, maturity " + "SELECT security_id AS redcode, security_desc, sum(notional) AS notional, maturity " "FROM list_cds_positions_by_strat(%s, %s) " ) params = (d, fund) @@ -38,22 +39,27 @@ def get_index_portfolio( params += (exclude_strategies,) if folder_filter: sql_str += "WHERE " + " AND ".join(folder_filter) - sql_str += "GROUP BY security_id, maturity" + sql_str += "GROUP BY security_id, security_desc, maturity" + if by_strat: + sql_str = sql_str.replace("redcode,", "redcode, folder,") + sql_str += ", folder" with conn.cursor() as c: c.execute(sql_str, params) trades = [ - CreditIndex( - redcode=rec.redcode, - maturity=rec.maturity, - notional=rec.notional, - value_date=d, - freeze_version=True, + ( + CreditIndex( + redcode=rec.redcode, + maturity=rec.maturity, + notional=rec.notional, + value_date=d, + freeze_version=True, + ), + (rec.folder if by_strat else "", rec.security_desc), ) for rec in c if rec.redcode not in exclude_redcode ] - trade_ids = [("", f"{t.index_type}{t.series} {t.tenor}") for t in trades] - portf = Portfolio(trades, trade_ids) + portf = Portfolio(*zip(*trades)) portf.mark() return portf |
