aboutsummaryrefslogtreecommitdiffstats
path: root/python/risk/ir_swap.py
blob: 72691fb7609b013d4b80b36f23eeafb303b8c159 (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
import logging
from psycopg import sql

logger = logging.getLogger(__name__)


def insert_ir_swap_portfolio(portf, conn):
    cols = [
        "date",
        "swp_id",
        "notional",
        "pv",
        "DV01",
        "IRGamma1bp",
    ]
    sql_str = sql.SQL(
        "INSERT INTO ir_swap_risk({columns}) "
        "VALUES({placeholders}) "
        " ON CONFLICT (date, swp_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 swap {trade_id}")
            c.execute(
                sql_str,
                (
                    trade.value_date,
                    trade_id.split("_")[1],
                    trade.notional,
                    trade.pv,
                    trade.DV01,
                    trade.gamma,
                ),
            )
    conn.commit()