import logging from analytics import Portfolio, BlackSwaption from db import DataError 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)) try: trade_ids, deal_ids = zip(*c) except ValueError: return {} portf = Portfolio([BlackSwaption.from_tradeid(t) for t in trade_ids], trade_ids=deal_ids) portf.value_date = date portf.mark(interp_method='bivariate_linear', **kwargs) return portf def insert_swaption_portfolio(portf, conn): sql_str = "INSERT INTO swaption_marks VALUES(%s, %s, %s, %s, %s, %s, %s)" 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) try: c.execute(sql_str, to_insert) except DataError as e: logger.error(e) finally: logger.info("succesfully marked trade id: %s", id) conn.commit()