aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/risk/swaptions.py51
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: