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