aboutsummaryrefslogtreecommitdiffstats
path: root/python/trade_dataclasses.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/trade_dataclasses.py')
-rw-r--r--python/trade_dataclasses.py75
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"],
+ )