aboutsummaryrefslogtreecommitdiffstats
path: root/python/book_bbg2.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/book_bbg2.py')
-rw-r--r--python/book_bbg2.py150
1 files changed, 0 insertions, 150 deletions
diff --git a/python/book_bbg2.py b/python/book_bbg2.py
deleted file mode 100644
index 671bf1c0..00000000
--- a/python/book_bbg2.py
+++ /dev/null
@@ -1,150 +0,0 @@
-from serenitas.utils.env import DAILY_DIR
-from serenitas.utils.remote import SftpClient
-from zoneinfo import ZoneInfo
-import datetime
-import csv
-from trade_dataclasses import CDSDeal, BondDeal
-from decimal import Decimal
-from serenitas.utils.db import dbconn
-from lru import LRU
-from stat import S_ISREG
-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 = (
- "SELECT maturity, coupon "
- "FROM index_desc "
- "WHERE tenor=%s AND redindexcode=%s "
- )
- with conn.cursor() as c:
- c.execute(sql_str, (redcode, tenor))
- return c.fetchone()
-
-
-def cdx_booking_process(path, conn):
- with open(path) as fh:
- reader = csv.DictReader(fh)
- for line in reader:
- tenor = line["Security"].rsplit(" ", 1)[-1].lower() + "r"
- maturity, coupon = get_indic_data(conn, tenor, line["Red Code"])
- trade = CDSDeal(
- fund=_funds[line["Account"]],
- folder="*",
- portfolio="UNALLOCATED",
- security_id=line["Red Code"],
- security_desc=line["Security"].removesuffix(" PRC"),
- traded_level=Decimal(line["Price (Dec)"]),
- notional=line["Quantity"],
- fixed_rate=coupon * 0.01,
- trade_date=datetime.datetime.strptime(
- line["Trade Dt"], "%m/%d/%Y"
- ).date(),
- maturity=maturity,
- currency=line["Curncy"],
- protection="Buyer" if line["Side"] == "B" else "Seller",
- upfront=line["Principal"],
- cp_code=_cdx_cp[line["Brkr"]],
- account_code=_fcms[line["Client FCM"]],
- )
- trade.stage()
- CDSDeal.commit()
-
-
-def bond_booking_process(path, conn, fname, _cache):
- df = pd.read_csv(path)
- for _, line in df.iterrows():
- trade = BondDeal(
- 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",
- asset_class=None,
- description=line["Security"].removesuffix(" Mtge"),
- buysell=line["Side"] == "B",
- bbg_ticket_id=fname,
- )
- trade.stage()
- df["bbg_ticket_id"] = [fname]
- try:
- df.to_sql("bond_tickets", dawn_engine, if_exists="append", index=False)
- except SQLAlchemyError as e:
- error = str(e.__dict__["orig"])
- BondDeal._insert_queue.clear()
- print(error)
- else:
- _cache[fname] = None
- finally:
- BondDeal.commit()
-
-
-def get_bbg_id(name):
- return name.split("_", 1)[1]
-
-
-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")
- filters = [lambda f: S_ISREG(f.st_mode)]
- for f in filter(
- lambda f: all(filt(f) for filt in filters), sftp.client.listdir_iter("/")
- ):
- if ("CDX" in f.filename) or ("BOND" in f.filename):
- if get_bbg_id(f.filename) in _cache.keys():
- continue
- else:
- if "CDX" in f.filename:
- # cds_booking_process(sftp.client.open(f"/{f.filename}"), conn, get_bbg_id(f.filename), _cache)
- pass
- elif "BOND" in f.filename:
- bond_booking_process(
- sftp.client.open(f"/{f.filename}"),
- conn,
- get_bbg_id(f.filename),
- _cache,
- )
- time.sleep(60)