aboutsummaryrefslogtreecommitdiffstats
path: root/python/bbg_index_quotes.py
blob: 6dddc4629899ded600305d3adbb81e0cb8be0441 (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
from bbg_helpers import init_bbg_session, BBG_IP, retrieve_data
import datetime
from db import dbconn

securities = {}
for series in range(9, 32):
    for index_type in ["IG", "HY"]:
        for t in [3, 5, 7, 10]:
            securities[f"CDX {index_type} CDSI S{series} {t}Y Corp"] = \
                (series, index_type, f"{t}yr")
for series in range(10, 31):
    for index_type in ["EUR", "XOVER"]:
        for t in [3, 5, 7, 10]:
            securities[f"ITRX {index_type} CDSI S{series} {t}Y Corp"] = \
                (series, index_type, f"{t}yr")

place_holders = ",".join(['%s'] * 7)
sql_str_price = ("INSERT INTO index_quotes_pre"
                 "(date, index, series, version, tenor, close_price, source)"
                 f" VALUES({place_holders}) ON CONFLICT DO NOTHING")
sql_str_spread = ("INSERT INTO index_quotes_pre"
                  "(date, index, series, version, tenor, close_spread, source)"
                  f" VALUES({place_holders}) ON CONFLICT DO NOTHING")

start_date = datetime.date.today() - datetime.timedelta(days=7)  # one weeek of overlap
conn = dbconn('serenitasdb')
with init_bbg_session(BBG_IP) as session:
    d = retrieve_data(session, securities.keys(), fields=["TICKER", "VERSION"])
    ticker_mapping = {v['TICKER']: securities[k] + (v['VERSION'],)
                      for k, v in d.items() if v}
    for pcs in ["MSG1", "CMAN", "CBGN"]:
        securities = [f"{e['TICKER']} {pcs} Curncy" for e in d.values() if e]
        d2 = retrieve_data(session, securities, fields=["PX_LAST"],
                           start_date=start_date)
        with conn.cursor() as c:
            for k, v in d2.items():
                ticker = k.split()[0]
                series, index, tenor, version = ticker_mapping[ticker]
                if index == "EUR":
                    index = "EU"
                if index == "XOVER":
                    index = "XO"
                if index == "HY":
                    sql_str = sql_str_price
                else:
                    sql_str = sql_str_spread
                if not v.empty:
                    c.executemany(sql_str,
                                  [(t[0], index, series, version, tenor, t[1], pcs)
                                   for t in v.itertuples()])
        conn.commit()