aboutsummaryrefslogtreecommitdiffstats
path: root/python/risk/tranches.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/risk/tranches.py')
-rw-r--r--python/risk/tranches.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/python/risk/tranches.py b/python/risk/tranches.py
index 01c08951..c5352ba5 100644
--- a/python/risk/tranches.py
+++ b/python/risk/tranches.py
@@ -1,3 +1,4 @@
+import numpy as np
from pyisda.date import cds_accrued
from serenitas.analytics.api import Portfolio, DualCorrTranche
from serenitas.analytics.dates import prev_business_day
@@ -80,8 +81,9 @@ def insert_tranche_pnl_explain(portf, conn):
to_insert = []
for trade_id in all_ids:
- pnl = 0
- fx_pnl = 0
+ pnl = 0.0
+ fx_pnl = 0.0
+ corr_pnl = 0.0
if trade_id in daily_trades:
trade = daily_trades[trade_id]
pnl = trade.upfront * get_fx(value_date, trade.currency)
@@ -131,6 +133,11 @@ def insert_tranche_pnl_explain(portf, conn):
* get_fx(prev_day, trade.currency)
)
)
+ prev_rho = np.array(
+ [previous_risk.corr_attach, previous_risk.corr_detach]
+ )
+ rho = trade.rho
+ corr_pnl = np.nansum((rho - prev_rho) * previous_risk.corr01_vec)
else:
fx_pnl = 0.0
day_trade = daily_trades[trade_id]
@@ -145,12 +152,12 @@ def insert_tranche_pnl_explain(portf, conn):
pnl += trade.pv * get_fx(value_date, trade.currency)
unexplained = pnl - delta_pnl - fx_pnl
to_insert.append(
- (value_date, trade_id, pnl, fx_pnl, delta_pnl, unexplained)
+ (value_date, trade_id, pnl, fx_pnl, delta_pnl, corr_pnl, unexplained)
)
c.executemany(
- "INSERT INTO tranche_pnl_explain(date, tranche_id, pnl, fx_pnl, delta_pnl, unexplained) "
- "VALUES (%s, %s, %s, %s, %s, %s)",
+ "INSERT INTO tranche_pnl_explain(date, tranche_id, pnl, fx_pnl, delta_pnl, corr_pnl, unexplained) "
+ "VALUES (%s, %s, %s, %s, %s, %s, %s)",
to_insert,
)
conn.commit()
@@ -168,7 +175,7 @@ def insert_tranche_risk(portf, conn):
"gamma",
"theta",
"theta_amount",
- "corr01",
+ "corr01_vec",
"tranche_factor",
"upfront",
"running",