diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/pnl_explain.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/python/pnl_explain.py b/python/pnl_explain.py index a631eeb7..56e35634 100644 --- a/python/pnl_explain.py +++ b/python/pnl_explain.py @@ -4,6 +4,7 @@ import serenitas.analytics from serenitas.analytics.dates import bus_day, prev_business_day, next_business_day from serenitas.analytics.utils import get_fx +from serenitas.analytics.api import FxForward from psycopg2.errors import SyntaxError from psycopg2.extensions import connection from risk.swaptions import get_swaption_portfolio @@ -283,6 +284,28 @@ def get_tranche_pv2( return pd.concat([df, df_cashflows], axis=1).join(strategies).sort_index() +def get_fx_pv(start_date: datetime.date, end_date: datetime.date, fund: str, **kwargs): + dr = pd.bdate_range(start_date - bus_day, end_date, freq=bus_day) + df_pv, df_upfront = {}, {} + for d in dr.date: + portf = FxForward.get_portfolio(d, fund=fund) + df_pv[d] = portf.pv + upfront = 0 + pv = 0 + for t in portf.trades: + if t.settle_date == d: + upfront += t.pnl + else: + pv += t.pnl + df_upfront[d] = upfront + df_pv[d] = pv + df_pv = pd.DataFrame.from_dict(df_pv, orient="index", columns=["pv"]) + df_upfront = pd.DataFrame.from_dict( + df_upfront, orient="index", columns=["net_settle"] + ) + return pd.concat([df_pv, df_upfront], axis=1) + + def get_pv(**kwargs): pnl_type = kwargs.pop("pnl_type") if "pv2" in kwargs: |
