diff options
Diffstat (limited to 'python/trade_dataclasses.py')
| -rw-r--r-- | python/trade_dataclasses.py | 75 |
1 files changed, 57 insertions, 18 deletions
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"], + ) |
