aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/collateral_calc.py63
1 files changed, 44 insertions, 19 deletions
diff --git a/python/collateral_calc.py b/python/collateral_calc.py
index de9f0960..885b29ee 100644
--- a/python/collateral_calc.py
+++ b/python/collateral_calc.py
@@ -264,7 +264,7 @@ def sg_collateral(d):
return df
-def ms_collateral(d):
+def ms_collateral(d, dawn_trades):
df = pd.read_excel(DAILY_DIR / "MS_reports" / f"Collateral_Detail_{d:%Y%m%d}.xls")
collat = df.loc[1, 'coll_val_ccy'].replace(",", "")
if "(" in collat:
@@ -273,13 +273,14 @@ def ms_collateral(d):
else:
collat = float(collat)
df = pd.read_excel(DAILY_DIR / "MS_reports" / f"Trade_Detail_{d:%Y%m%d}.xls")
- d = {'TRCDX': 'IGTCDSCSH',
- 'ABINT': 'MBSCDSCSH',
- 'ACSWN': 'IRDEVCSH',
- 'ABOPB': 'HYCDSCSH',
- 'ACUSD': 'IRDEVCSH'}
- df.trade_book = df.trade_book.replace(d)
- df = df.groupby('trade_book')[["collat_req_in_agr_ccy"]].sum()
+ df = df.merge(dawn_trades, how='left', left_on='trade_id', right_on='cpty_id')
+ # d = {'TRCDX': 'IGTCDSCSH',
+ # 'ABINT': 'MBSCDSCSH',
+ # 'ACSWN': 'IRDEVCSH',
+ # 'ABOPB': 'HYCDSCSH',
+ # 'ACUSD': 'IRDEVCSH'}
+ # df.trade_book = df.trade_book.replace(d)
+ df = df.groupby('folder')[["collat_req_in_agr_ccy"]].sum()
df['Currency'] = "USD"
df = df.reset_index()
col_names= ['Strategy', 'Amount', 'Currency']
@@ -300,21 +301,44 @@ def load_gs_file(d, pattern):
return df
-def gs_collateral(d):
+def get_dawn_trades():
+ df_cds = pd.read_sql_query("SELECT cpty_id, folder FROM cds "
+ "WHERE cpty_id IS NOT NULL", dawn_engine)
+ df_swaptions = pd.read_sql_query("SELECT cpty_id, folder FROM swaptions "
+ "WHERE cpty_id IS NOT NULL", dawn_engine)
+ df_caps = pd.read_sql_query("SELECT cpty_id, folder FROM capfloors "
+ "WHERE cpty_id IS NOT NULL", dawn_engine)
+ df = pd.concat([df_cds, df_swaptions, df_caps])
+ df = df.replace({"folder": {'IGREC': 'IGCDSCSH',
+ 'IGPAYER': 'IGCDSCSH',
+ 'HYPAYER': 'HYCDSCSH',
+ 'HYREC': 'HYCDSCSH',
+ 'STEEP': 'IRDEVCSH',
+ 'FLAT': 'IRDEVCSH',
+ 'MBSCDS': 'MBSCDSCSH',
+ 'SER_IGMEZ': 'IGTCDSCSH',
+ 'SER_IGSNR': 'IGTCDSCSH',
+ 'SER_IGEQY': 'IGTCDSCSH',
+ 'SER_HYMEZ': 'HYTCDSCSH'}})
+ return df
+
+def gs_collateral(d, dawn_trades):
df = load_gs_file(d, "Collateral_Detail")
collateral = float(df.Quantity)
df = load_gs_file(d, "Trade_Detail")
- df = df[['Transaction Type', 'NPV (USD)', 'Initial Margin Required']]
- df = df.groupby('Transaction Type').sum()
+ df = df[['Trade Id', 'Transaction Type', 'NPV (USD)', 'Initial Margin Required']]
+ df = df.merge(dawn_trades, how='left', left_on='Trade Id', right_on='cpty_id')
+ df = df[['folder', 'NPV (USD)', 'Initial Margin Required']]
+ df = df.groupby('folder').sum()
df = df.sum(axis=1).to_frame(name='Amount')
df['Currency'] = 'USD'
df = df.reset_index()
df.columns = ['Strategy', 'Amount', 'Currency']
# TODO: need to break down SWO_CDIXOP between IG and HY
- df.Strategy = df.Strategy.replace({'SWAP_CDINDT': 'IGTCDSCSH',
- 'GENERIC_IRSIRD': 'IRDEVCSH',
- 'SWO_CDIXOP': 'IGCDSCSH',
- 'FX': 'M_CSH_CASH'})
+ # df.Strategy = df.Strategy.replace({'SWAP_CDINDT': 'IGTCDSCSH',
+ # 'GENERIC_IRSIRD': 'IRDEVCSH',
+ # 'SWO_CDIXOP': 'IGCDSCSH',
+ # 'FX': 'M_CSH_CASH'})
df.Amount *= -1
df = df.append({'Strategy': "M_CSH_CASH",
'Amount': -collateral - df.Amount.sum(),
@@ -348,16 +372,17 @@ if __name__ == "__main__":
d = (pd.Timestamp.today() - BDay()).normalize()
#download_sftp_files(d)
download_baml_files()
+ dawn_trades = get_dawn_trades()
try:
- df_ms = ms_collateral(d)
+ df_ms = ms_collateral(d, dawn_trades)
except FileNotFoundError as e:
logging.info(e)
- df_ms = ms_collateral(d - BDay())
+ df_ms = ms_collateral(d - BDay(), dawn_trades)
#df_sg = sg_collateral(d)
df_baml = baml_collateral(d)
try:
- df_gs = gs_collateral(d)
+ df_gs = gs_collateral(d, dawn_trades)
except FileNotFoundError as e:
logging.info(e)
- df_gs = gs_collateral(d - BDay())
+ df_gs = gs_collateral(d - BDay(), dawn_trades)
send_email(df_ms, df_baml, df_gs)