aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/Dawn/templates/cds_blotter.html4
-rw-r--r--sql/dawn.sql37
2 files changed, 23 insertions, 18 deletions
diff --git a/python/Dawn/templates/cds_blotter.html b/python/Dawn/templates/cds_blotter.html
index e4cdf5ce..a1734f0f 100644
--- a/python/Dawn/templates/cds_blotter.html
+++ b/python/Dawn/templates/cds_blotter.html
@@ -25,8 +25,8 @@
<td>{{trade.security_id}}</td>
<td>{{"{0:,.2f}".format(trade.notional)}}</td>
<td>{{"{0:,.2f}".format(trade.upfront)}}</td>
- <td>{{trade.attach if trade.attach is not none}}</td>
- <td>{{trade.detach if trade.detach is not none}}</td>
+ <td>{{trade.orig_attach if trade.attach is not none}}</td>
+ <td>{{trade.orig_detach if trade.detach is not none}}</td>
<td><a href="{{url_for('edit_counterparty',
cpcode=trade.counterparty.code)}}">{{trade.counterparty.name}}</a></td>
<td>{{trade.folder}}</td>
diff --git a/sql/dawn.sql b/sql/dawn.sql
index 161c734a..5894a684 100644
--- a/sql/dawn.sql
+++ b/sql/dawn.sql
@@ -315,10 +315,8 @@ END
$$ LANGUAGE plpgsql;
-create
- trigger dealid after insert
- on
- capfloors for each row execute procedure auto_dealid() ;
+CREATE TRIGGER dealid AFTER INSERT ON capfloors
+FOR EACH ROW EXECUTE PROCEDURE auto_dealid() ;
CREATE TRIGGER cds_attach AFTER INSERT OR UPDATE OF orig_attach, orig_detach ON cds
FOR EACH ROW EXECUTE PROCEDURE update_attach();
@@ -544,13 +542,14 @@ DECLARE
BEGIN
query := 'WITH tmp AS (SELECT cds.security_id, cds.security_desc, cds.maturity,
cds.fixed_rate, cds.currency, %s SUM(cds.notional * (CASE WHEN cds.protection=''Buyer'' THEN 1 ELSE -1 END))
-OVER (PARTITION BY cds.security_id, cds.maturity, cds.attach, cds.detach) AS notional
+OVER (PARTITION BY cds.security_id, cds.maturity, cds.orig_attach, cds.orig_detach) AS notional
FROM cds WHERE (cds.termination_date is NULL OR cds.termination_date> $1) and cds.trade_date <=$1 %s)
SELECT DISTINCT ON (tmp.security_id, tmp.maturity %s) * FROM tmp WHERE tmp.notional!=0';
IF p_type = 'tranche' THEN
- RETURN format(query, 'cds.attach,cds.detach,cds.initial_margin_percentage,',
- 'AND cds.attach is NOT NULL', ',tmp.attach');
+ RETURN format(query, 'cds.orig_attach,cds.orig_detach,cds.attach,cds.detach,'
+ 'cds.initial_margin_percentage,',
+ 'AND cds.orig_attach is NOT NULL', ',tmp.orig_attach');
ELSIF p_type = 'cds' THEN
RETURN format(query, '', 'AND cds.attach is NULL AND cds.folder!=''MBSCDS''', '');
ELSIF p_type = 'abs' THEN
@@ -613,7 +612,8 @@ $$ LANGUAGE plpgsql;
CREATE OR REPLACE function list_tranche_positions(p_date date)
RETURNS TABLE(security_id varchar(12), security_desc varchar(32), maturity date,
- fixed_rate float, currency currency, attach smallint, detach smallint,
+ fixed_rate float, currency currency, orig_attach smallint,
+ orig_detach smallint, attach float, detach float,
initial_margin_percentage float,
notional float) AS $$
BEGIN
@@ -724,16 +724,17 @@ days:=days_accrued(p_date);
SELECT eurusd INTO eur_fx FROM fx WHERE date=p_date;
RETURN QUERY
WITH temp AS (SELECT a.*, c.index, c.series, c.version, c.basketid, d.tenor,
- tranche_factor(a.attach, a.detach, c.indexfactor, c.cumulativeloss) AS fact
+ (a.detach-a.attach)/(a.orig_detach-a.orig_attach) * c.indexfactor / 100 AS fact
FROM list_tranche_positions(p_date) a
LEFT JOIN index_version c ON a.security_id=c.redindexcode
LEFT JOIN index_maturity d USING (index, series, maturity)),
-tranche_price AS (SELECT DISTINCT ON (basketid, tenor, attach, detach) basketid, tenor, e.attach, e.detach, upfront_mid, tranche_spread FROM
+tranche_price AS (SELECT DISTINCT ON (basketid, tenor, orig_attach, orig_detach) basketid, tenor,
+ e.attach AS orig_attach, e.detach AS orig_detach, upfront_mid, tranche_spread FROM
markit_tranche_quotes e WHERE quotedate BETWEEN p_date - interval '1 week' AND p_date
- ORDER by basketid, tenor, attach, detach, quotedate desc),
-risk_num AS (SELECT DISTINCT ON (series, attach, detach, tenor) * from risk_num_per_quote
+ ORDER by basketid, tenor, e.attach, e.detach, quotedate desc),
+risk_num AS (SELECT DISTINCT ON (series, b.attach, b.detach, tenor) * from risk_num_per_quote b
WHERE date BETWEEN p_date - interval '1 week' AND p_date
- ORDER by series, attach, detach, tenor, date desc)
+ ORDER by series, b.attach, b.detach, tenor, date desc)
SELECT temp.security_id, temp.security_desc, temp.index, temp.series, temp.version, temp.tenor,
temp.maturity, temp.notional, temp.fact,
tranche_spread::integer,
@@ -743,10 +744,14 @@ SELECT temp.security_id, temp.security_desc, temp.index, temp.series, temp.versi
(CASE WHEN temp.currency = 'EUR' THEN eur_fx ELSE 1 END),
temp.initial_margin_percentage, risk_num.theta, risk_num.duration, risk_num.tranchedelta,
risk_num.trancheupfrontmid, risk_num.indexrefprice, risk_num.indexrefspread,
- temp.attach, temp.detach, risk_num.index_duration
+ temp.orig_attach, temp.orig_detach, risk_num.index_duration
FROM temp
-LEFT JOIN tranche_price USING (basketid, attach, detach, tenor)
-LEFT JOIN risk_num USING (series, attach, detach, tenor);
+LEFT JOIN tranche_price USING (basketid, orig_attach, orig_detach, tenor)
+LEFT JOIN risk_num ON
+ temp.series=risk_num.series
+ AND temp.orig_attach = risk_num.attach
+ AND temp.orig_detach = risk_num.detach
+ AND temp.tenor = risk_num.tenor;
END
$$ LANGUAGE plpgsql;