aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/book_bbg.py96
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__":