diff options
Diffstat (limited to 'python/collateral/__main__.py')
| -rw-r--r-- | python/collateral/__main__.py | 81 |
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)) |
