1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import logging
from psycopg import sql
logger = logging.getLogger(__name__)
def insert_ir_portfolio(portf, conn):
cols = [
"date",
"swpt_id",
"notional",
"pv",
"vol",
"vol_type",
"DV01",
"IRGamma1bp",
"vega",
]
sql_str = sql.SQL(
"INSERT INTO ir_swaption_risk({columns}) "
"VALUES({placeholders}) "
" ON CONFLICT (date, swpt_id) DO UPDATE "
"SET {update_str}"
).format(
columns=sql.SQL(",").join([sql.Identifier(c) for c in cols]),
placeholders=sql.SQL(",").join([sql.Placeholder()] * len(cols)),
update_str=sql.SQL(",").join(
[
sql.SQL("{c} = EXCLUDED.{c}").format(c=sql.Identifier(c))
for c in cols[2:]
]
),
)
with conn.cursor() as c:
for trade_id, trade in portf.items():
logger.info(f"marking IR swaption {trade_id}")
c.execute(
sql_str,
(
trade.value_date,
trade_id,
trade.notional,
trade.pv,
trade.implied_vol,
trade._vol_type.name,
trade.DV01,
trade.IRGamma1bp,
trade.vega,
),
)
conn.commit()
|