diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/book_bbg.py | 54 | ||||
| -rw-r--r-- | python/trade_dataclasses.py | 75 |
2 files changed, 63 insertions, 66 deletions
diff --git a/python/book_bbg.py b/python/book_bbg.py index d9d139a7..7da29b01 100644 --- a/python/book_bbg.py +++ b/python/book_bbg.py @@ -12,39 +12,6 @@ import pandas as pd from sqlalchemy.exc import SQLAlchemyError import time -_funds = {"SERENITAS_CGMF": "SERCGMAST", "BOWDOINST": "BOWDST"} -_fcms = {"Bank of America, N.A.": "BAML", "Goldman Sachs": "GS"} -_cdx_cp = { - "MSDU": "MSCSNY", - "GSMX": "GOLDNY", - "JPGP": "JPCBNY", - "JFF": "JEFF", - "BMLE": "BAMSNY", - "BARX": "BARCNY", - "CSDA": "CSFBBO", - "EBNP": "BNPBNY", - "WFCD": "WELFEI", - "BSEF": "BSEONY", - "JPOS": "JPCBNY", - "CGCI": "CITINY", -} -_bond_cp = { - "CG": "CITINY", - "WFBS": "WELFEI", - "MZZ": "MIZUNY", - "BABS": "BAML", - "PTRU": "PERFCH", - "BARC": "BARCNY", - "MS": "MORGNY", - "BA": "BAML", - "FB": "CSUINY", - "INTC": "STONEX", - "SOCG": "SGSANY", - "NOM": "NOMINY", - "JP": "JPCBNY", - "BTIG": "BTIG", -} - def get_indic_data(conn, redcode, tenor): sql_str = ( @@ -84,21 +51,13 @@ def cdx_booking_process(path, conn): def bond_booking_process(path, fname): - reader = csv.DictReader(path) - for line in reader: - line["bbg_ticket_id"] = fname - trade = BondDeal + for row in csv.DictReader(path): + line = {"bbg_ticket_id": fname} + line.update(row) + breakpoint() + trade = BondDeal.from_bbg_line(line) trade.stage() - try: - BondDeal.insert_bbg_line(line) - except Exception as e: - pass - BondDeal._insert_queue.clear() - print("error") - else: - _cache[fname] = None - finally: - BondDeal.commit() + BondDeal.commit() def get_bbg_id(name): @@ -109,7 +68,6 @@ if __name__ == "__main__": from serenitas.utils.db import serenitas_pool, dawn_engine conn = serenitas_pool.getconn() - _cache = LRU(128) while True: d = datetime.date.today() sftp = SftpClient.from_creds("bbg") diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py index 9d174782..37d0ead6 100644 --- a/python/trade_dataclasses.py +++ b/python/trade_dataclasses.py @@ -16,6 +16,39 @@ Portfolio = Literal[ "OPTIONS", "IR", "MORTGAGES", "CURVE", "TRANCHE", "CLO", "HEDGE_MAC" ] # deprecated IG, HY, STRUCTURED +_funds = {"SERENITAS_CGMF": "SERCGMAST", "BOWDOINST": "BOWDST"} +_fcms = {"Bank of America, N.A.": "BAML", "Goldman Sachs": "GS"} +_cdx_cp = { + "MSDU": "MSCSNY", + "GSMX": "GOLDNY", + "JPGP": "JPCBNY", + "JFF": "JEFF", + "BMLE": "BAMSNY", + "BARX": "BARCNY", + "CSDA": "CSFBBO", + "EBNP": "BNPBNY", + "WFCD": "WELFEI", + "BSEF": "BSEONY", + "JPOS": "JPCBNY", + "CGCI": "CITINY", +} +_bond_cp = { + "CG": "CITINY", + "WFBS": "WELFEI", + "MZZ": "MIZUNY", + "BABS": "BAML", + "PTRU": "PERFCH", + "BARC": "BARCNY", + "MS": "MORGNY", + "BA": "BAML", + "FB": "CSUINY", + "INTC": "STONEX", + "SOCG": "SGSANY", + "NOM": "NOMINY", + "JP": "JPCBNY", + "BTIG": "BTIG", +} + class BusDayConvention(str, Enum): modified_following = "Modified Following" @@ -121,9 +154,9 @@ class Deal: _sql_insert: ClassVar[str] _sql_select: ClassVar[str] _insert_queue: ClassVar[list] = [] - _bbg_sql_insert: ClassVar[str] _bbg_insert_queue: ClassVar[list] = [] _cache: ClassVar[LRU] = LRU(128) + _bbg_sql_insert: ClassVar[str] def __init_subclass__(cls, table_name: str): super().__init_subclass__() @@ -260,20 +293,26 @@ class BondDeal(Deal, table_name="bonds"): asset_class: AssetClass = field(default=None) bbg_ticket_id: str = None - def from_bbg_line(self, line: dict): - self.faceamount = Decimal(line["Quantity"]) - self.price = Decimal(line["Price (Dec)"]) - self.cp_code = _bond_cp[line["Brkr"]] - self.cusip = line["Cusip"] - self.identifier = line["Cusip"] - self.trade_date = datetime.datetime.strptime(line["Trade Dt"], "%m/%d/%Y") - self.settle_date = datetime.datetime.strptime(line["SetDt"], "%m/%d/%Y") - self.portfolio = "UNALLOCATED" - self.asset_class = None - self.description = line["Security"].removesuffix(" Mtge") - self.buysell = line["Side"] == "B" - self.bbg_ticket_id = line["bbg_ticket_id"] - bbg_tickets = [self.bbg_ticket_id, *line.values()] - place_holders = ",".join(["%s"] * len(bbg_tickets)) - self._bbg_sql_insert = f"INSERT INTO bond_tickets VALUES({place_holders})" - self._bbg_insert_queue.append(bbg_tickets) + def __post_init__(self): + BondDeal._bbg_sql_insert = ( + f"INSERT INTO bond_tickets VALUES({','.join(['%s'] * 20)})" + ) + + @classmethod + def from_bbg_line(cls, line: dict): + values = list(line.values()) + breakpoint() + cls._bbg_insert_queue.append(values) + return cls( + faceamount=Decimal(line["Quantity"]), + price=Decimal(line["Price (Dec)"]), + cp_code=_bond_cp[line["Brkr"]], + cusip=line["Cusip"], + identifier=line["Cusip"], + trade_date=datetime.datetime.strptime(line["Trade Dt"], "%m/%d/%Y"), + settle_date=datetime.datetime.strptime(line["SetDt"], "%m/%d/%Y"), + portfolio="UNALLOCATED", + description=line["Security"].removesuffix(" Mtge"), + buysell=line["Side"] == "B", + bbg_ticket_id=line["bbg_ticket_id"], + ) |
