diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/pnl_explain.py | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/python/pnl_explain.py b/python/pnl_explain.py index 9851ee76..c1b42e3c 100644 --- a/python/pnl_explain.py +++ b/python/pnl_explain.py @@ -69,7 +69,6 @@ def pnl_explain(identifier, start_date = None, end_date = None, daily['realized_accrued'] = daily.interest/100 * daily.faceamount daily['accrued'] = yearfrac(daily.prev_cpn_date, daily.index.to_series(), daycount) * \ daily.coupon/100*daily.factor * daily.faceamount - daily['unrealized_accrued'] = daily.accrued.diff() + daily.realized_accrued if delay >0: ## we shift cashflows by delay 'D', and then move it to the next business day ## for some reason .shift(0, bus_day) doesn't work (but would work on an index) @@ -79,13 +78,13 @@ def pnl_explain(identifier, start_date = None, end_date = None, if not daily.loc[daily.realized_pnl>0, 'realized_pnl'].empty: daily['realized_pnl'] = (daily.loc[daily.realized_pnl>0, 'realized_pnl']. shift(delay, 'D').shift(-1, bus_day).shift(1, bus_day)) - - daily[['realized_pnl', 'realized_accrued']] = (daily[['realized_pnl', 'realized_accrued']]. - fillna(value=0)) + cols = ['unrealized_pnl', 'realized_pnl', 'realized_accrued', 'clean_nav'] + daily[cols] = daily[cols].fillna(value=0) extra_pnl = daily.clean_nav.diff() - daily.principal_payment daily.loc[daily.principal_payment>0 , 'unrealized_pnl'] += extra_pnl[daily.principal_payment>0] daily.loc[daily.principal_payment<0, 'realized_pnl'] += extra_pnl[daily.principal_payment<0] daily['realized_accrued'] -= daily.accrued_payment + daily['unrealized_accrued'] = daily.accrued.diff() + daily.realized_accrued return daily[['clean_nav', 'accrued', 'unrealized_pnl', 'realized_pnl', 'unrealized_accrued', 'realized_accrued']].iloc[1:,] |
