aboutsummaryrefslogtreecommitdiffstats
path: root/python/risk/ir.py
blob: 0cc68c8997ede20edd90215772f64cbc01ffe376 (plain)
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()