diff options
| -rw-r--r-- | python/pnl_explain.py | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/python/pnl_explain.py b/python/pnl_explain.py index cec9e691..2bb3df82 100644 --- a/python/pnl_explain.py +++ b/python/pnl_explain.py @@ -200,7 +200,6 @@ def get_tranche_pv2( df = df.sort_index() strategies = df.folder df = df[["clean_nav", "accrued"]] - df = df.drop(start_date) with conn.cursor() as c: c.execute( "SELECT termination_date AS date, cds.id, " @@ -219,8 +218,7 @@ def get_tranche_pv2( with conn.cursor() as c: c.execute( "SELECT trade_date AS date, id, " - "upfront * (CASE WHEN currency='USD' " - "THEN 1. ELSE eurusd END) AS amount " + "upfront * (CASE WHEN currency='USD' THEN 1. ELSE eurusd END) AS amount " "FROM cds LEFT JOIN fx ON date=trade_date " "WHERE trade_date BETWEEN %s AND %s " "AND swap_type='CD_INDEX_TRANCHE' AND fund=%s", @@ -235,21 +233,22 @@ def get_tranche_pv2( principal = pd.concat([df_terminations, df_upfronts], axis=1).sum(axis=1) principal.name = "principal" df_cashflows = pd.read_sql_query( - "SELECT date, principal, accrued, " - "tranche_id FROM tranche_cashflows " - "join cds on tranche_id =id " - "WHERE date BETWEEN %s AND %s " - "and fund = %s", + "SELECT date, tranche_id AS id, principal * coalesce(fx, 1.) AS principal, " + "accrued * coalesce(fx, 1.) AS accrued " + "FROM tranche_cashflows " + "LEFT JOIN (" + " SELECT date, 'EUR'::currency AS currency, eurusd AS fx FROM fx) fx " + "USING (date, currency) " + "LEFT JOIN cds ON tranche_id=id " + "WHERE date BETWEEN %s AND %s AND fund=%s", conn, params=(start_date, end_date, fund), parse_dates=["date"], - index_col=["date", "tranche_id"], - ).fillna(0.0) - df_cashflows.index.names = ["date", "id"] + index_col=["date", "id"], + ) df_cashflows = principal.to_frame().add(df_cashflows, fill_value=0.0) df_cashflows = df_cashflows.rename(columns={"accrued": "realized_accrued"}) - df = pd.concat([df, df_cashflows], axis=1).join(strategies).sort_index() - return df.rename(columns={"clean_nav": "pv"}) + return pd.concat([df, df_cashflows], axis=1).join(strategies).sort_index() def get_pv(**kwargs): |
