diff options
Diffstat (limited to 'python/pnl_explain.py')
| -rw-r--r-- | python/pnl_explain.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/python/pnl_explain.py b/python/pnl_explain.py index ee9ba1a7..1a0c3187 100644 --- a/python/pnl_explain.py +++ b/python/pnl_explain.py @@ -364,10 +364,6 @@ def get_bond_pv( positions = pd.concat(dfs, names=["date", "identifier"]) notionals = pd.concat(dfs_1, names=["date", "identifier"]) positions = positions.join(notionals) - positions[["usd_market_value", "int_acc"]] -= positions.groupby(level="identifier")[ - ["usd_market_value", "int_acc"] - ].shift(fill_value=0.0) - positions = positions.drop(start_date - bus_day, level=0) cashflows = pd.read_sql_query( "SELECT identifier, prev_cpn_date AS date, interest, principal " "FROM factors_history fh " @@ -399,7 +395,7 @@ def get_bond_pv( df = positions.join([cashflows, trades]) df.interest *= df.notional / 100 df.principal *= df.notional / 100 - return df + return df.drop("notional", axis=1) def get_pnl( @@ -408,7 +404,22 @@ def get_pnl( pv2=False, ): if asset_class == "bond": - return df_instrument.drop("notional", axis=1).groupby("date").sum().sum(axis=1) + df_pnl = ( + df_instrument[["usd_market_value", "int_acc"]] + .groupby("date") + .sum() + .diff() + .sum(axis=1) + ) + df_pnl += ( + df_instrument[ + ["interest", "principal", "principal_payment", "accrued_payment"] + ] + .groupby("date") + .sum() + .sum(axis=1) + ) + return df_pnl elif asset_class == "tranche": if pv2: df_pnl = df_instrument.copy().fillna(0.0) |
