diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/collateral/__main__.py | 4 | ||||
| -rw-r--r-- | python/collateral/baml_fcm.py | 11 | ||||
| -rw-r--r-- | python/collateral/gs_fcm.py | 15 |
3 files changed, 20 insertions, 10 deletions
diff --git a/python/collateral/__main__.py b/python/collateral/__main__.py index b491265e..e270dc58 100644 --- a/python/collateral/__main__.py +++ b/python/collateral/__main__.py @@ -131,11 +131,11 @@ for fund in funds: parse_dates=["maturity"], ) positions_rates = pd.read_sql_query( - "SELECT maturity_date, (fixed_rate /100)::NUMERIC(4, 4) as fixed_rate, currency, roll_day, notional, folder " + "SELECT maturity_date, (fixed_rate /100)::NUMERIC(4, 4) as fixed_rate, float_index, currency, roll_day, notional, folder " "FROM list_ir_positions(%s, %s) ", dawn_engine, params=(fund_mapping[fund], workdate), - index_col=["maturity_date", "fixed_rate", "roll_day"], + index_col=["maturity_date", "fixed_rate", "roll_day", "float_index"], parse_dates=["maturity_date"], ) df[(fund, fcm.upper())] = run_collateral( diff --git a/python/collateral/baml_fcm.py b/python/collateral/baml_fcm.py index f89bbc8f..b1459471 100644 --- a/python/collateral/baml_fcm.py +++ b/python/collateral/baml_fcm.py @@ -96,15 +96,18 @@ def collateral(d, positions, *, engine, fund="Serenitas", positions_irs, **kwarg "EFFDATE", "MATDATE", "LEG1ROLLCONV", + "FLOATINGINDEX", ], parse_dates=["MATDATE", "EFFDATE"], ) df_rates.loc[df_rates["DIRECTION"] == "Rec", "NOTIONAL"] *= -1 df_rates["FIXEDRATE"] = df_rates["FIXEDRATE"].round(4) - df_rates = df_rates.groupby(by=["MATDATE", "FIXEDRATE", "LEG1ROLLCONV"]).agg( - {"NOTIONAL": "sum", "NPV": "sum"} - ) - df_rates.index.names = ["maturity_date", "fixed_rate", "roll_day"] + _rate_index_mapping = {"USD-SOFR-COMPOUND": "SOFRRATE"} + df_rates["FLOATINGINDEX"] = df_rates["FLOATINGINDEX"].replace(_rate_index_mapping) + df_rates = df_rates.groupby( + by=["MATDATE", "FIXEDRATE", "LEG1ROLLCONV", "FLOATINGINDEX"] + ).agg({"NOTIONAL": "sum", "NPV": "sum"}) + df_rates.index.names = ["maturity_date", "fixed_rate", "roll_day", "float_index"] compare_notionals_rates(df_rates, positions_irs, "BAML") positions_irs["Amount"] = df_rates.reindex(positions_irs.index)["NPV"] positions_irs.folder.replace(STRATEGY_CASH_MAPPING, inplace=True) diff --git a/python/collateral/gs_fcm.py b/python/collateral/gs_fcm.py index 33d25bfd..2a0592b5 100644 --- a/python/collateral/gs_fcm.py +++ b/python/collateral/gs_fcm.py @@ -52,13 +52,20 @@ def collateral(d: datetime.date, positions, *, engine, fund, positions_irs, **kw else row["Pay Leg Rate/Index"], axis=1, ) + _rate_index_mapping = {"1Y-USD-SOFR-COMPOUND": "SOFRRATE"} + df_rates["float_index"] = df_rates.apply( + lambda row: _rate_index_mapping[row["Receive Leg Rate/Index"]] + if row["Direction"] == "Pay" + else _rate_index_mapping[row["Pay Leg Rate/Index"]], + axis=1, + ) # Going to fix roll day at IMM for now until we have the column updated df_rates["roll_day"] = "IMM" df_rates = df_rates.rename(columns={"Pay Notional": "NOTIONAL"}) - df_rates = df_rates.groupby(by=["Maturity Date", "fixed_rate", "roll_day"])[ - ["NOTIONAL", "NPV (local)"] - ].sum() - df_rates.index.names = ["maturity_date", "fixed_rate", "roll_day"] + df_rates = df_rates.groupby( + by=["Maturity Date", "fixed_rate", "roll_day", "float_index"] + )[["NOTIONAL", "NPV (local)"]].sum() + df_rates.index.names = ["maturity_date", "fixed_rate", "roll_day", "float_index"] df = df[df["Instrument"] == "CDS"].drop( ["Instrument", "CCP Trade ID", "Pay Notional"], axis=1 ) |
