aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sql/dawn.sql96
1 files changed, 75 insertions, 21 deletions
diff --git a/sql/dawn.sql b/sql/dawn.sql
index be668225..861fc4b3 100644
--- a/sql/dawn.sql
+++ b/sql/dawn.sql
@@ -1874,10 +1874,10 @@ $$ LANGUAGE plpython3u;
CREATE OR REPLACE VIEW tranche_risk_serenitas AS
SELECT tranche_risk.date, tranche_id as trade_id, b.globeop_id, security_desc, index, series, maturity, orig_attach,
orig_detach, tranche_risk.notional,
- globeop_notional,
+ admin_notional,
clean_nav * coalesce(fx, 1.) as serenitas_clean_nav,
- globeop_clean_nav,
- accrued * coalesce(fx, 1.) as serenitas_accrued, globeop_accrued,
+ admin_clean_nav,
+ accrued * coalesce(fx, 1.) as serenitas_accrued, admin_accrued,
nav AS cpty_nav,
duration, delta, gamma, theta, tranche_factor,
tranche_risk.corr_attach, tranche_risk.corr_detach,
@@ -1888,9 +1888,9 @@ 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
LEFT JOIN cds ON (tranche_id=id)
RIGHT JOIN (SELECT invid, periodenddate,
- sum(endbookunrealincome) AS globeop_accrued,
- sum(endbooknav-endbookunrealincome) AS globeop_clean_nav,
- sum(endqty) AS globeop_notional
+ sum(endbookunrealincome) AS admin_accrued,
+ sum(endbooknav-endbookunrealincome) AS admin_clean_nav,
+ sum(endqty) AS admin_notional
FROM valuation_reports GROUP BY invid, periodenddate) a
ON (invid=b.full_globeop_id AND periodenddate=tranche_risk.date)
LEFT JOIN index_version ON (security_id=redindexcode)
@@ -1898,22 +1898,76 @@ LEFT JOIN (SELECT date, 'EUR'::currency AS currency, eurusd AS fx FROM fx) fx US
LEFT JOIN external_marks_deriv on cpty_id=identifier and external_marks_deriv.date=tranche_risk.date
ORDER BY index, series, orig_attach;
+CREATE OR REPLACE VIEW tranche_risk_bowdst AS
+SELECT tranche_risk.date, tranche_id as trade_id, security_desc, index, series, maturity, orig_attach,
+ orig_detach, tranche_risk.notional,
+ admin_notional,
+ clean_nav * coalesce(fx, 1.) as serenitas_clean_nav,
+ admin_clean_nav,
+ accrued * coalesce(fx, 1.) as serenitas_accrued,
+ NULL AS admin_accrued,
+ nav AS cpty_nav,
+ duration, delta, gamma, theta, 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
+FROM tranche_risk
+LEFT JOIN cds ON (tranche_id=id)
+LEFT JOIN (SELECT as_of_date, link_ref, current_notional * (CASE WHEN coupon_rate=0 THEN 1. ELSE -1. END) AS admin_notional, base_market_value * (CASE WHEN coupon_rate=0 THEN 1. ELSE -1. END) AS admin_clean_nav FROM bowdst_val WHERE link_ref LIKE 'SCCDS%' aAND base_market_value!=0) b ON link_ref=format('SCCDS%s',tranche_id) AND as_of_date=tranche_risk.date
+LEFT JOIN index_version ON (security_id=redindexcode)
+LEFT JOIN (SELECT date, 'EUR'::currency AS currency, eurusd AS fx FROM fx) fx USING (date, currency)
+LEFT JOIN external_marks_deriv on cpty_id=identifier and external_marks_deriv.date=tranche_risk.date
+WHERE fund='BOWDST'
+ORDER BY index, series, orig_attach;
-CREATE OR REPLACE VIEW tranche_risk_serenitas_agg AS
-SELECT date, security_desc, index, series, sum(globeop_notional) as globeop_notional,
- sum(globeop_clean_nav) as globeop_clean_nav, maturity, sum(notional) as orig_ntl,
- avg(tranche_factor) as tranche_factor, avg(running) as running,
- sum(serenitas_clean_nav) as serenitas_clean_nav,
- sum(serenitas_accrued) as serenitas_accrued,
- sum(initial_margin_percentage * abs(notional)/100) as initial_margin,
- avg(theta) as theta, avg(duration) as duration, avg(delta) as delta,
- avg(upfront) as upfront, avg(index_refprice) as index_refprice,
- avg(index_refspread) as index_refspread,
- orig_attach, orig_detach, avg(index_duration) as index_duration,
- avg(gamma) as gamma
- FROM tranche_risk_serenitas
- GROUP BY date, index, security_desc, series, orig_attach, orig_detach, maturity
- ORDER BY index, series;
+CREATE OR REPLACE VIEW tranche_risk_brinker AS
+SELECT tranche_risk.date, tranche_id as trade_id, security_desc, index, series, maturity, orig_attach,
+ orig_detach, tranche_risk.notional,
+ admin_notional,
+ clean_nav * coalesce(fx, 1.) as serenitas_clean_nav,
+ admin_clean_nav,
+ accrued * coalesce(fx, 1.) as serenitas_accrued,
+ NULL AS admin_accrued,
+ nav AS cpty_nav,
+ duration, delta, gamma, theta, 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
+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
+FROM bbh_val WHERE sub_security_type_code ='CXT' AND interest_rate IS NOT NULL) b ON b.security_id=format('SCCDS%s', tranche_id) AND accounting_date=tranche_risk.date
+LEFT JOIN index_version ON (cds.security_id=redindexcode)
+LEFT JOIN (SELECT date, 'EUR'::currency AS currency, eurusd AS fx FROM fx) fx USING (date, currency)
+LEFT JOIN external_marks_deriv on cpty_id=identifier and external_marks_deriv.date=tranche_risk.date
+WHERE fund='BRINKER'
+ORDER BY index, series, orig_attach;
+
+CREATE OR REPLACE FUNCTION tranche_risk_agg(p_date date, p_fund text)
+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) AS $$
+DECLARE
+ query text;
+BEGIN
+query := 'SELECT date, security_desc, index, series, sum(admin_notional),
+ sum(admin_clean_nav), maturity, sum(notional),
+ avg(tranche_factor), avg(running),
+ sum(serenitas_clean_nav),
+ sum(serenitas_accrued),
+ sum(initial_margin_percentage * 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)
+ FROM tranche_risk_%I
+ GROUP BY date, index, security_desc, series, orig_attach, orig_detach, maturity
+ HAVING date=$1
+ ORDER BY index, series';
+query := format(query, p_fund);
+RETURN QUERY EXECUTE query USING p_date;
+END
+$$ LANGUAGE plpgsql;
CREATE OR REPLACE VIEW tranche_risk_master AS