from bbg_helpers import init_bbg_session, BBG_IP, retrieve_data import datetime from utils.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()