diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/risk/swaptions.py | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/python/risk/swaptions.py b/python/risk/swaptions.py index a90dad20..3ef4337f 100644 --- a/python/risk/swaptions.py +++ b/python/risk/swaptions.py @@ -5,20 +5,25 @@ from psycopg2 import sql logger = logging.getLogger(__name__) + def get_swaption_portfolio(date, conn, **kwargs): with conn.cursor() as c: - c.execute("SELECT id, dealid FROM swaptions " - "WHERE (termination_date is NULL or termination_date > %s) " - "AND expiration_date > %s AND trade_date <= %s " - "AND swap_type='CD_INDEX_OPTION'", (date, date, date)) + c.execute( + "SELECT id, folder, dealid FROM swaptions " + "WHERE (termination_date is NULL or termination_date > %s) " + "AND expiration_date > %s AND trade_date <= %s " + "AND swap_type='CD_INDEX_OPTION'", + (date, date, date), + ) try: - trade_ids, deal_ids = zip(*c) + trade_ids, folders, deal_ids = zip(*c) except ValueError: return {} - portf = Portfolio([BlackSwaption.from_tradeid(t) for t in trade_ids], - trade_ids=deal_ids) + portf = Portfolio( + [BlackSwaption.from_tradeid(t) for t in trade_ids], list(zip(folders, deal_ids)) + ) portf.value_date = date - portf.mark(interp_method='bivariate_linear', **kwargs) + portf.mark(interp_method="bivariate_linear", **kwargs) return portf @@ -26,20 +31,30 @@ def insert_swaption_portfolio(portf, conn, overwrite=True): columns = ["market_value", "delta", "gamma", "vega", "theta"] place_holders = sql.SQL(", ").join([sql.Placeholder()] * 7) if overwrite: - update_str = (sql.SQL("DO UPDATE SET {}"). - format(sql.SQL(", "). - join(sql.SQL("{} = excluded.{}"). - format(sql.Identifier(col), sql.Identifier(col)) - for col in columns))) + update_str = sql.SQL("DO UPDATE SET {}").format( + sql.SQL(", ").join( + sql.SQL("{} = excluded.{}").format( + sql.Identifier(col), sql.Identifier(col) + ) + for col in columns + ) + ) else: update_str = sql.SQL("DO NOTHING") - sql_str = (sql.SQL("INSERT INTO swaption_marks VALUES({}) " - "ON CONFLICT (dealid, date) {} "). - format(place_holders, update_str)) + sql_str = sql.SQL( + "INSERT INTO swaption_marks VALUES({}) " "ON CONFLICT (dealid, date) {} " + ).format(place_holders, update_str) with conn.cursor() as c: for id, trade in portf.items(): - to_insert = (id, trade.value_date, trade.pv, trade.delta, - trade.gamma, trade.vega, trade.theta) + to_insert = ( + id[1], + trade.value_date, + trade.pv, + trade.delta, + trade.gamma, + trade.vega, + trade.theta, + ) try: c.execute(sql_str, to_insert) except DataError as e: |
