aboutsummaryrefslogtreecommitdiffstats
path: root/python/collateral
diff options
context:
space:
mode:
Diffstat (limited to 'python/collateral')
-rw-r--r--python/collateral/__main__.py17
-rw-r--r--python/collateral/baml_isda.py25
-rw-r--r--python/collateral/gs.py2
-rw-r--r--python/collateral/ms.py2
4 files changed, 34 insertions, 12 deletions
diff --git a/python/collateral/__main__.py b/python/collateral/__main__.py
index 01d2a283..7c8cbf6b 100644
--- a/python/collateral/__main__.py
+++ b/python/collateral/__main__.py
@@ -42,13 +42,14 @@ counterparties = (
"gs_fcm",
"jpm",
)
+funds = ("Serenitas", "Brinker", "BowdSt", "Selene")
if args.download:
from serenitas.utils.exchange import ExchangeMessage
em = ExchangeMessage()
for cp in counterparties:
cp_mod = import_module(f".{cp}", "collateral")
- for fund in ("Serenitas", "Brinker", "BowdSt"):
+ for fund in funds:
cp_mod.download_files(em, fund=fund)
workdate = prev_business_day(args.workdate)
@@ -63,6 +64,10 @@ cp_dict = {
"fcms": ("gs_fcm",),
"isda_cps": ("ms", "bnp", "gs", "baml_isda", "cs", "jpm"),
},
+ "Selene": {
+ "fcms": ("baml_fcm",),
+ "isda_cps": ("baml_isda",),
+ },
}
@@ -91,9 +96,14 @@ def run_collateral(cp, fund, positions, positions_rates, workdate, engine):
df = {}
fcm_mapping = {"baml_fcm": "BAML", "wells": "WF", "gs_fcm": "GS"}
-fund_mapping = {"Serenitas": "SERCGMAST", "Brinker": "BRINKER", "BowdSt": "BOWDST"}
+fund_mapping = {
+ "Serenitas": "SERCGMAST",
+ "Brinker": "BRINKER",
+ "BowdSt": "BOWDST",
+ "Selene": "ISOSEL",
+}
-for fund in ("Serenitas", "Brinker", "BowdSt"):
+for fund in funds:
bilat_positions = get_bilateral_trades(workdate, fund_mapping[fund], dawn_engine)
for fcm in cp_dict[fund]["fcms"]:
positions = pd.read_sql_query(
@@ -115,7 +125,6 @@ for fund in ("Serenitas", "Brinker", "BowdSt"):
df[(fund, fcm.upper())] = run_collateral(
fcm, fund, positions, positions_rates, workdate, dawn_engine
)
-
for cp in cp_dict[fund]["isda_cps"]:
df[(fund, cp.upper())] = run_collateral(
cp, fund, bilat_positions, None, workdate, dawn_engine
diff --git a/python/collateral/baml_isda.py b/python/collateral/baml_isda.py
index 685c0a12..c87f8ea1 100644
--- a/python/collateral/baml_isda.py
+++ b/python/collateral/baml_isda.py
@@ -61,6 +61,7 @@ def download_from_secure_id(
paths = {
"Serenitas": ["NYops", "Margin Calls Baml"],
"BowdSt": ["BowdoinOps", "Margin BoA"],
+ "Selene": ["SeleneOps", "Margin BoA"],
}
@@ -176,16 +177,24 @@ def collateral(d, dawn_trades, *, fund="Serenitas", **kwargs):
raise ValueError(f"no collateral data for date {report_date}")
df = pd.read_excel(fname, skiprows=6, skipfooter=6)
if df.empty:
- raise ValueError("empty collateral file")
- df = df.drop(0, axis=0)
+ collateral = 0
+ logger.warning("empty collateral file")
+ else:
+ df = df.drop(0, axis=0)
+ try:
+ collateral = float(df.Notional)
+ except TypeError:
+ collateral = df.Notional.sum()
try:
- collateral = float(df.Notional)
- except TypeError:
- collateral = df.Notional.sum()
- try:
- tag = "SLP" if fund == "Serenitas" else "LLC"
+ match fund:
+ case "Serenitas":
+ tag = "TSLP"
+ case "Bowdst":
+ tag = "TLLC"
+ case "Selene":
+ tag = "INC"
fname = next(
- REPORTS_DIR.glob(f"301__LMCG_INVESTMENT{tag}_CSA_{report_date:%m%d%Y}_*")
+ REPORTS_DIR.glob(f"301__LMCG_INVESTMEN{tag}_CSA_{report_date:%m%d%Y}_*")
)
except StopIteration:
raise ValueError(f"no trade-level data for date {report_date}")
diff --git a/python/collateral/gs.py b/python/collateral/gs.py
index 03bb4be0..c747f940 100644
--- a/python/collateral/gs.py
+++ b/python/collateral/gs.py
@@ -12,6 +12,8 @@ paths = {
def download_files(em, count=20, *, fund="Serenitas", **kwargs):
+ if fund not in paths:
+ return
emails = em.get_msgs(path=paths[fund], count=count, subject__contains="Margin")
DATA_DIR = DAILY_DIR / fund / "GS_reports"
for msg in emails:
diff --git a/python/collateral/ms.py b/python/collateral/ms.py
index dc50613d..8b341f40 100644
--- a/python/collateral/ms.py
+++ b/python/collateral/ms.py
@@ -17,6 +17,8 @@ subjects = {
def download_files(em, count=20, *, fund="Serenitas", **kwargs):
+ if fund not in paths:
+ return
emails = em.get_msgs(
path=paths[fund],
count=count,