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.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py
index c6bd1353..ead0774d 100644
--- a/python/trade_dataclasses.py
+++ b/python/trade_dataclasses.py
@@ -9,6 +9,7 @@ from serenitas.analytics.dates import next_business_day, previous_twentieth
from serenitas.analytics.index import CreditIndex
from serenitas.utils.db import dbconn
from process_queue import rename_keys
+from lru import LRU
Fund = Literal["SERCGMAST", "BRINKER", "BOWDST"]
Portfolio = Literal[
@@ -120,6 +121,7 @@ class Deal:
_sql_insert: ClassVar[str]
_sql_select: ClassVar[str]
_insert_queue: ClassVar[list] = []
+ _cache: ClassVar[LRU] = LRU(128)
def __init_subclass__(cls, table_name: str):
super().__init_subclass__()
@@ -254,3 +256,24 @@ class BondDeal(Deal, table_name="bonds"):
portfolio: Portfolio = field(default=None)
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"]
+
+ def insert_bbg_line(self, line: dict):
+ bond_ticket_columns = ",".join(c for c in line.keys())
+ bond_place_holders = ",".join(["%s"] * len(line.keys()))
+ sql_str = f"INSERT INTO bond_tickets({bond_ticket_columns}) VALUES({bond_place_holders})"
+ with self._conn() as c:
+ c.execute(sql_str, line.values())