aboutsummaryrefslogtreecommitdiffstats
path: root/python/collateral/cs.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/collateral/cs.py')
-rw-r--r--python/collateral/cs.py75
1 files changed, 74 insertions, 1 deletions
diff --git a/python/collateral/cs.py b/python/collateral/cs.py
index bfee4d17..ae25d0db 100644
--- a/python/collateral/cs.py
+++ b/python/collateral/cs.py
@@ -1,15 +1,19 @@
+import datetime
import pandas as pd
from . import DAILY_DIR
+from operator import itemgetter
+from pandas.tseries.offsets import BDay
+from xlrd import open_workbook
def download_files(count=20):
from exchange import ExchangeMessage
+ DATA_DIR = DAILY_DIR / "CS_reports"
em = ExchangeMessage()
emails = em.get_msgs(
path=["NYops", "Margin Calls CS"], count=count, subject__contains="DERV048829"
)
- DATA_DIR = DAILY_DIR / "CS_reports"
for msg in emails:
for attach in msg.attachments:
fname = attach.name
@@ -17,3 +21,72 @@ def download_files(count=20):
p = DATA_DIR / fname
if not p.exists():
p.write_bytes(attach.content)
+
+ emails = em.get_msgs(
+ path=["NYops", "Margin Calls CS"],
+ count=count,
+ sender="americas.collateralmgt@credit-suisse.com",
+ )
+
+ for msg in emails:
+ for attach in msg.attachments:
+ fname = attach.name
+ if "Serenitas CGMF" in fname:
+ p = DATA_DIR / fname
+ p = p.parent / f"{msg.datetime_sent:%Y-%m-%d} {p.stem}{p.suffix}"
+ if not p.exists():
+ p.write_bytes(attach.content)
+
+
+def get_collateral(d):
+ DATA_DIR = DAILY_DIR / "CS_reports"
+ # get most recent file before current date
+ def get_date(p):
+ return datetime.date.fromisoformat(p.stem.split(" ", 1)[0])
+
+ files = ((f, get_date(f)) for f in DATA_DIR.glob("*.xls"))
+ files = sorted(filter(lambda t: t[1] <= d, files), key=itemgetter(1), reverse=True)
+ wb = open_workbook(files[0][0])
+ s = wb.sheet_by_index(0)
+ i = 0
+ for i, v in enumerate(s.col_values(0)):
+ if v.startswith("Total Value of Collateral"):
+ return s.cell_value(i, 1) + 900_000
+ if v.startswith("No Positions to Report"):
+ return 0.0
+
+
+def collateral(d, dawn_trades, *args):
+ collateral = get_collateral(d + BDay())
+ df = pd.read_excel(
+ f"/home/serenitas/Daily/CS_reports/DERV048829_{d:%b%d%Y}.xlsx",
+ header=9,
+ skipfooter=50,
+ )
+ df = df[["Order No", "Mid Price", "Notional Currency"]]
+ df["Mid Price"] = (
+ df["Mid Price"]
+ .str.replace(",", "")
+ .apply(lambda s: -float(s[1:-1]) if s.startswith("(") else float(s))
+ )
+ df["Order No"] = df["Order No"].astype("str")
+ df = df.merge(dawn_trades, how="left", left_on="Order No", right_on="cpty_id")
+ missing_ids = df.loc[df.cpty_id.isnull(), "Order No"]
+ if not missing_ids.empty:
+ raise ValueError(f"{missing_ids.tolist()} not in the database")
+ df.ia = df.ia.fillna(0.0)
+ df["Amount"] = df.ia + df["Mid Price"]
+ df = df[["folder", "Amount", "Notional Currency"]]
+ df = df.groupby(["folder", "Notional Currency"], as_index=False).sum()
+ df = df.rename(columns={"folder": "Strategy", "Notional Currency": "Currency"})
+ df.Amount *= -1
+ df = df.append(
+ {
+ "Strategy": "M_CSH_CASH",
+ "Amount": -collateral - df.Amount.sum(),
+ "Currency": "USD",
+ },
+ ignore_index=True,
+ )
+ df["date"] = d
+ return df.set_index("Strategy")