aboutsummaryrefslogtreecommitdiffstats
path: root/python/collateral/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/collateral/__main__.py')
-rw-r--r--python/collateral/__main__.py81
1 files changed, 53 insertions, 28 deletions
diff --git a/python/collateral/__main__.py b/python/collateral/__main__.py
index 6f82ed9f..5dc74661 100644
--- a/python/collateral/__main__.py
+++ b/python/collateral/__main__.py
@@ -5,7 +5,7 @@ from importlib import import_module
from utils import SerenitasFileHandler
from utils.db import dawn_engine, dbconn
-from .common import get_dawn_trades, send_email
+from .common import get_bilateral_trades, send_email
from pandas.tseries.offsets import BDay
import argparse
@@ -39,44 +39,69 @@ if args.download:
for fund in ("Serenitas", "Brinker", "BowdSt"):
cp_mod.download_files(em, fund=fund)
-dawn_trades = get_dawn_trades(args.workdate, dawn_engine)
-
-df = {}
-mapping = {"baml_fcm": "BAML", "wells": "WF"}
args.workdate -= BDay()
-for cp in counterparties:
+
+cp_dict = {
+ "Serenitas": {
+ "fcms": ("baml_fcm", "wells"),
+ "isda_cps": ("citi", "baml_isda", "ms", "gs", "bnp", "cs"),
+ },
+ "Brinker": {"fcms": (), "isda_cps": ("ms", "gs")},
+ "BowdSt": {"fcms": (), "isda_cps": ("ms", "bnp")},
+}
+
+
+def run_collateral(cp, fund, positions, workdate, engine):
cp_mod = import_module("." + cp, "collateral")
- if cp in ["baml_fcm", "wells"]:
+ lookback = 0
+ while lookback < 2:
+ try:
+ return cp_mod.collateral(
+ workdate - BDay(lookback), positions, engine=engine, fund=fund
+ )
+ except FileNotFoundError as e:
+ logger.info(e)
+ lookback += 1
+ except ValueError as e:
+ logger.error(e)
+ break
+ else:
+ break
+
+
+df = {}
+fcm_mapping = {"baml_fcm": "BAML", "wells": "WF"}
+fund_mapping = {"Serenitas": "SERCGMAST", "Brinker": "BRINKER", "BowdSt": "BOWDST"}
+
+for fund in ("Serenitas", "Brinker", "BowdSt"):
+ bilat_positions = get_bilateral_trades(
+ args.workdate, fund_mapping[fund], dawn_engine
+ )
+ for fcm in cp_dict[fund]["fcms"]:
positions = pd.read_sql_query(
"SELECT security_id, security_desc, maturity, "
"folder, notional, currency "
"FROM list_cds_positions_by_strat_fcm(%s, %s)",
dawn_engine,
- params=(args.workdate.date(), mapping[cp]),
+ params=(args.workdate.date(), fcm_mapping[fcm]),
index_col=["security_id", "maturity"],
)
- else:
- positions = dawn_trades
- for fund in ("Serenitas", "Brinker", "BowdSt"):
- lookback = 0
- while lookback < 2:
- try:
- df[(fund, cp.upper())] = cp_mod.collateral(
- args.workdate - BDay(lookback), positions, engine=dawn_engine,
- fund=fund
- )
- except FileNotFoundError as e:
- logger.info(e)
- lookback += 1
- except ValueError as e:
- logger.error(e)
- break
- else:
- break
+ df[(fund, fcm.upper())] = run_collateral(
+ fcm, fund, positions, args.workdate, dawn_engine
+ )
+ for cp in cp_dict[fund]["isda_cps"]:
+ df[(fund, cp.upper())] = run_collateral(
+ cp, fund, bilat_positions, args.workdate, dawn_engine
+ )
+
df = pd.concat(df, names=["fund", "broker", "strategy"]).reset_index()
df.strategy = df.strategy.str.replace("^(M_|SER_)?", "", 1)
-df = df[["date", "broker", "strategy", "Amount", "Currency"]]
+df["fund"] = df.fund.map(
+ {"Serenitas": "SERCGMAST", "Brinker": "BRINKER", "BowdSt": "BOWDST"}
+)
+
+df = df[["date", "broker", "strategy", "Amount", "Currency", "fund"]]
conn = dbconn("dawndb")
sql_str = (
"INSERT INTO strategy_im VALUES(%s, %s, %s, %s, %s, %s) "
@@ -90,4 +115,4 @@ conn.commit()
conn.close()
if args.send_email:
- send_email(args.workdate, df)
+ send_email(args.workdate, df[df.fund == "Serenitas"].drop("fund", axis=1))