aboutsummaryrefslogtreecommitdiffstats
path: root/python/pnl_explain.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/pnl_explain.py')
-rw-r--r--python/pnl_explain.py23
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)