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