aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/risk/tranches.py4
-rw-r--r--sql/dawn.sql27
2 files changed, 18 insertions, 13 deletions
diff --git a/python/risk/tranches.py b/python/risk/tranches.py
index 0e255e18..30d7f66f 100644
--- a/python/risk/tranches.py
+++ b/python/risk/tranches.py
@@ -54,6 +54,7 @@ def insert_tranche_portfolio(portf, conn):
"delta",
"gamma",
"theta",
+ "theta_amount",
"corr01",
"tranche_factor",
"upfront",
@@ -63,6 +64,7 @@ def insert_tranche_portfolio(portf, conn):
"index_refprice",
"index_refspread",
"index_duration",
+ "hy_equiv",
]
update_str = ",".join(f"{c} = EXCLUDED.{c}" for c in cols[2:])
sql_str = (
@@ -95,6 +97,7 @@ def insert_tranche_portfolio(portf, conn):
trade.delta,
trade.gamma,
theta,
+ theta * trade.notional * trade.tranche_factor * trade._index._fx,
trade.corr01,
trade.tranche_factor,
trade.upfront,
@@ -107,6 +110,7 @@ def insert_tranche_portfolio(portf, conn):
)
* 10000,
float(trade._index.duration()),
+ trade.hy_equiv,
),
)
conn.commit()
diff --git a/sql/dawn.sql b/sql/dawn.sql
index 0b1dfc92..d67edde0 100644
--- a/sql/dawn.sql
+++ b/sql/dawn.sql
@@ -1173,6 +1173,8 @@ CREATE TABLE tranche_risk(
index_refprice float,
index_refspread float,
index_duration float,
+ hy_equiv float,
+ theta_amount float,
PRIMARY KEY (date, tranche_id))
CREATE OR REPLACE function list_tranche_marks(p_date date, fund fund DEFAULT 'SERCGMAST'::fund)
@@ -1929,7 +1931,7 @@ df.columns = df.columns.droplevel(level=0)
df = df.reindex(columns=source_list).reset_index()
for t in (df.itertuples(index=False)):
- yield [t[0], t[1]] + [None if np.isnan(v) else v for v in t[2:]]]
+ yield [t[0], t[1]] + [None if np.isnan(v) else v for v in t[2:]]
$$ LANGUAGE plpython3u;
@@ -1941,10 +1943,10 @@ SELECT tranche_risk.date, tranche_id as trade_id, b.globeop_id, security_desc, i
admin_clean_nav,
accrued * coalesce(fx, 1.) as serenitas_accrued, admin_accrued,
base_nav AS cpty_nav,
- duration, delta, gamma, theta, tranche_factor,
+ duration, delta, gamma, theta, theta_amount, tranche_factor,
tranche_risk.corr_attach, tranche_risk.corr_detach,
tranche_risk.upfront, tranche_risk.running,
- index_refprice, index_refspread, index_duration, initial_margin_percentage, indexfactor
+ index_refprice, index_refspread, index_duration, hy_equiv, initial_margin_percentage
FROM tranche_risk
LEFT JOIN LATERAL
(SELECT full_globeop_id, globeop_id FROM id_mapping WHERE id_mapping.serenitas_id=tranche_id AND date <= tranche_risk.date ORDER by date desc LIMIT 1) b ON true
@@ -1969,10 +1971,10 @@ SELECT tranche_risk.date, tranche_id as trade_id, security_desc, index, series,
accrued * coalesce(fx, 1.) as serenitas_accrued,
NULL AS admin_accrued,
base_nav AS cpty_nav,
- duration, delta, gamma, theta, tranche_factor,
+ duration, delta, gamma, theta, theta_amount, tranche_factor,
tranche_risk.corr_attach, tranche_risk.corr_detach,
tranche_risk.upfront, tranche_risk.running,
- index_refprice, index_refspread, index_duration, initial_margin_percentage, indexfactor
+ index_refprice, index_refspread, index_duration, hy_equiv, initial_margin_percentage
FROM tranche_risk
LEFT JOIN cds ON (tranche_id=id)
LEFT JOIN (SELECT as_of_date, link_ref, (CASE WHEN coupon_rate=0 THEN current_notional ELSE -current_notional END) AS admin_notional, base_market_value AS admin_clean_nav FROM bowdst_val WHERE security_description_1 LIKE 'TRNCH%' AND base_market_value!=0) b ON link_ref=format('SCCDS%s',tranche_id) AND as_of_date=tranche_risk.date
@@ -1991,10 +1993,10 @@ SELECT tranche_risk.date, tranche_id as trade_id, security_desc, index, series,
accrued * coalesce(fx, 1.) as serenitas_accrued,
NULL AS admin_accrued,
base_nav AS cpty_nav,
- duration, delta, gamma, theta, tranche_factor,
+ duration, delta, gamma, theta, theta_amount, tranche_factor,
tranche_risk.corr_attach, tranche_risk.corr_detach,
tranche_risk.upfront, tranche_risk.running,
- index_refprice, index_refspread, index_duration, initial_margin_percentage, indexfactor
+ index_refprice, index_refspread, index_duration, hy_equiv, initial_margin_percentage
FROM tranche_risk
LEFT JOIN cds ON (tranche_id=id)
LEFT JOIN (SELECT accounting_date, security_id, quantity * (CASE WHEN long_short_indicator = 'S' THEN 1. ELSE -1. END) AS admin_notional, (local_market_value - quantity) * fx_rate AS admin_clean_nav
@@ -2007,7 +2009,7 @@ ORDER BY index, series, orig_attach;
CREATE OR REPLACE FUNCTION tranche_risk_agg(p_date date, p_fund fund DEFAULT 'SERCGMAST'::fund)
RETURNS TABLE(date date, security_desc varchar(32), index index_type, series smallint, admin_notional float, admin_clean_nav float,
-maturity date, serenitas_notional float, tranche_factor float, running float, serenitas_clean_nav float, serenitas_accrued float, initial_margin float, theta float, duration float, delta float, upfront float, index_refprice float, index_refspread float, orig_attach smallint, orig_detach smallint, index_duration float, gamma float, indexfactor float) AS $$
+maturity date, serenitas_notional float, tranche_factor float, running float, serenitas_clean_nav float, serenitas_accrued float, initial_margin float, theta float, theta_amount float, duration float, delta float, gamma float, hy_equiv float, upfront float, index_refprice float, index_refspread float, index_duration float, orig_attach smallint, orig_detach smallint) AS $$
DECLARE
query text;
fund text;
@@ -2023,11 +2025,10 @@ query := 'SELECT date, security_desc, index, series, sum(admin_notional),
sum(serenitas_clean_nav),
sum(serenitas_accrued),
sum(initial_margin_percentage * tranche_factor * abs(notional)/100),
- avg(theta), avg(duration), avg(delta),
- avg(upfront), avg(index_refprice),
- avg(index_refspread),
- orig_attach, orig_detach, avg(index_duration),
- avg(gamma), avg(indexfactor)
+ avg(theta), sum(theta_amount), avg(duration), avg(delta),
+ avg(gamma), sum(hy_equiv), avg(upfront), avg(index_refprice),
+ avg(index_refspread), avg(index_duration),
+ orig_attach, orig_detach
FROM tranche_risk_%I
GROUP BY date, index, security_desc, series, orig_attach, orig_detach, maturity
HAVING date=$1