aboutsummaryrefslogtreecommitdiffstats
path: root/python/bbg_cds_quotes.py
blob: ac96bf7962593d7db126a8a6a811383b3065650e (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
52
53
54
55
56
import datetime
import logging

from serenitas.analytics.bbg_helpers import bbg_retry, retrieve_data
from markit.import_quotes import get_basketids, get_bbg_tickers
from serenitas.utils import SerenitasFileHandler
from serenitas.utils.db import dbconn

logger = logging.getLogger("bbg_quotes")
fh = SerenitasFileHandler("bbg_quotes.log")
logger.addHandler(fh)
logger.setLevel(logging.INFO)

workdate = datetime.date.today()
serenitasdb = dbconn("serenitasdb")
basket_ids = get_basketids(serenitasdb, workdate)
bbg_tickers = set(get_bbg_tickers(serenitasdb, basket_ids, workdate))
logger.info("got bbg tickers")
securities = [f"{ticker} Curncy" for ticker in bbg_tickers]
fields = ["UPFRONT_RUNNING_SPREAD", "UPFRONT_BID", "UPFRONT_ASK", "CDS_RECOVERY_RT"]


@bbg_retry(2)
def bbg_call(session, securities, fields, r):
    for pcs in ["CBGN", "CMAN"]:  # , 'CMAN', 'MSG1']:
        logger.info(f"Retrieving quotes for {pcs}")
        r[pcs] = retrieve_data(
            session, securities, fields, overrides={"PRICING_SOURCE": pcs}
        )


r = {}
bbg_call(securities, fields, r)
sql_str = f"INSERT INTO cds_quotes VALUES({','.join(['%s'] * 8)})"


def build_tuple(k, v, workdate, source):
    return (
        workdate,
        k.split()[0],
        v.get("UPFRONT_BID"),
        v.get("UPFRONT_ASK"),
        v.get("UPFRONT_RUNNING_SPREAD"),
        v.get("UPFRONT_RUNNING_SPREAD"),
        source,
        v.get("CDS_RECOVERY_RT"),
    )


for pcs, data in r.items():
    logger.info(f"Inserting quotes for {pcs}")
    with serenitasdb.cursor() as c:
        c.executemany(
            sql_str, [build_tuple(k, v, workdate, pcs) for k, v in data.items()]
        )
    serenitasdb.commit()