diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/book_bbg.py | 96 |
1 files changed, 48 insertions, 48 deletions
diff --git a/python/book_bbg.py b/python/book_bbg.py index 5a5f62ce..082b22aa 100644 --- a/python/book_bbg.py +++ b/python/book_bbg.py @@ -6,10 +6,16 @@ from stat import S_ISREG import csv from process_queue import rename_keys from serenitas.utils.db import dbconn +from collections import defaultdict fund_dictionary = {"SERENITAS_CGMF": "SERCGMAST", "BOWDOINST": "BOWDST"} fcm_dictionary = {"Bank of America, N.A.": "BAML", "Goldman Sachs": "GS"} counterparty_dictionary = {"BNP PARIB.": "BNPBNY"} +sql_str_by_trade = { + "CDX": "INSERT INTO cds (action, folder, cp_code, account_code, trade_date, effective_date, maturity, currency, payment_rolldate, notional, fixed_rate, day_count, frequency, protection, security_id, security_desc, upfront, upfront_settle_date, swap_type, clearing_facility, portfolio, fund) " + "VALUES (%(action)s, %(folder)s, %(cp_code)s, %(account_code)s, %(trade_date)s, %(effective_date)s, %(maturity)s, %(currency)s, %(payment_rolldate)s, %(notional)s, %(fixed_rate)s, %(day_count)s, %(frequency)s, %(protection)s, %(security_id)s, %(security_desc)s, %(upfront)s, %(upfront_settle_date)s, %(swap_type)s, %(clearing_facility)s, %(portfolio)s, %(fund)s);", + "BOND": "", +} def download_files(date): @@ -52,63 +58,57 @@ def get_bbg_data(bbg_id, trade_date, conn): return str(maturity), redcode, coupon / 100 -def cdx_booking_process(path): - conn = dbconn("dawndb") - reader = csv.DictReader(open(path)) +def cdx_trade_process(reader, conn): trades = [] - for csv_dict in reader: + for obj in reader: rename_keys( - csv_dict, - { - "Curncy": "currency", - # 'Net': 'upfront' - }, - ) - csv_dict["upfront"] = float(csv_dict["Net"]) - csv_dict["security_desc"] = csv_dict["Security"].replace(" PRC", "") - csv_dict["traded_level"] = float(csv_dict["Price (Dec)"]) - csv_dict["notional"] = float(csv_dict["Quantity"]) - csv_dict["trade_date"] = datetime.datetime.strptime( - csv_dict["Trade Dt"], "%m/%d/%Y" + obj, + {"Curncy": "currency", "Net": "upfront", "Quantity": "notional"}, ) - csv_dict["upfront_settle_date"] = datetime.datetime.strptime( - csv_dict["SetDt"], "%m/%d/%Y" + obj["security_desc"] = obj["Security"].replace(" PRC", "") + obj["trade_date"] = datetime.datetime.strptime(obj["Trade Dt"], "%m/%d/%Y") + obj["upfront_settle_date"] = datetime.datetime.strptime( + obj["SetDt"], "%m/%d/%Y" ) - csv_dict["protection"] = "Buyer" if csv_dict["Side"] == "B" else "Seller" - csv_dict["account_code"] = fcm_dictionary[csv_dict["Client FCM"]] - csv_dict["fund"] = fund_dictionary[csv_dict["Account"]] - csv_dict["action"] = "NEW" - csv_dict["folder"] = "*" - csv_dict["cp_code"] = counterparty_dictionary[csv_dict["BrkrName"]] - csv_dict["payment_rolldate"] = "Following" - csv_dict["day_count"] = "ACT/360" - csv_dict["frequency"] = 4 - csv_dict["swap_type"] = "CD_INDEX" - csv_dict["portfolio"] = "UNALLOCATED" - csv_dict["clearing_facility"] = "ICE-CREDIT" + obj["protection"] = "Buyer" if obj["Side"] == "B" else "Seller" + obj["account_code"] = fcm_dictionary[obj["Client FCM"]] + obj["fund"] = fund_dictionary[obj["Account"]] + obj["action"] = "NEW" + obj["folder"] = "*" + obj["cp_code"] = counterparty_dictionary[obj["BrkrName"]] + obj["payment_rolldate"] = "Following" + obj["day_count"] = "ACT/360" + obj["frequency"] = 4 + obj["swap_type"] = "CD_INDEX" + obj["portfolio"] = "UNALLOCATED" + obj["clearing_facility"] = "ICE-CREDIT" ( - csv_dict["maturity"], - csv_dict["security_id"], - csv_dict["fixed_rate"], - ) = get_bbg_data(csv_dict["security_desc"], csv_dict["trade_date"], conn) - csv_dict["effective_date"] = datetime.date(2021, 12, 20) - trades.append(csv_dict) + obj["maturity"], + obj["security_id"], + obj["fixed_rate"], + ) = get_bbg_data(obj["security_desc"], obj["trade_date"], conn) + obj["effective_date"] = datetime.date(2021, 12, 20) + trades.append(obj) + return trades - with conn.cursor() as c: - c.executemany( - "INSERT INTO cds (action, folder, cp_code, account_code, trade_date, effective_date, maturity, currency, payment_rolldate, notional, fixed_rate, day_count, frequency, protection, security_id, security_desc, upfront, upfront_settle_date, swap_type, clearing_facility, portfolio, fund) " - "VALUES (%(action)s, %(folder)s, %(cp_code)s, %(account_code)s, %(trade_date)s, %(effective_date)s, %(maturity)s, %(currency)s, %(payment_rolldate)s, %(notional)s, %(fixed_rate)s, %(day_count)s, %(frequency)s, %(protection)s, %(security_id)s, %(security_desc)s, %(upfront)s, %(upfront_settle_date)s, %(swap_type)s, %(clearing_facility)s, %(portfolio)s, %(fund)s);", - trades, - ) - conn.commit() - -def book_trades(date): +def book_trades(downloaded_files, date): + conn = dbconn("dawndb") downloaded_files = download_files(date) - if downloaded_files: - for f in downloaded_files: + bbg_trades = defaultdict(list) + for f in downloaded_files: + if ("CDX" in f.name) or ("BOND" in f.name): + reader = csv.DictReader(open(f)) if "CDX" in f.name: - cdx_booking_process(f) + bbg_trades["CDX"].extend(cdx_trade_process(reader, conn)) + elif "BOND" in f.name: + bbg_trades["BOND"].extend(bond_trade_process(reader, conn)) + else: + print(f.name, "NOT VALID") + with conn.cursor() as c: + for asset_type, trades in bbg_trades.items(): + c.executemany(sql_str_by_trade[asset_type], trades) + conn.commit() if __name__ == "__main__": |
