diff options
| -rw-r--r-- | python/citco_ce_tranche.py | 12 | ||||
| -rw-r--r-- | sql/dawn.sql | 11 |
2 files changed, 9 insertions, 14 deletions
diff --git a/python/citco_ce_tranche.py b/python/citco_ce_tranche.py index f8bdfff1..be6ca373 100644 --- a/python/citco_ce_tranche.py +++ b/python/citco_ce_tranche.py @@ -4,17 +4,7 @@ from serenitas.utils.db import dbconn from serenitas.ops.trade_dataclasses import CDSDeal from serenitas.ops.funds import Service - -def calculate_attach_detach(redcode, orig_attach, orig_detach, conn): - with conn.cursor() as c: - c.execute( - "SELECT indexfactor, cumulativeloss FROM index_factors WHERE redindexcode=%s", - (redcode,), - ) - (factor, cumulativeloss) = c.fetchone() - detach = factor * min(max((orig_detach - cumulativeloss) / factor, 0), 1) - attach = factor * min(max((orig_attach - cumulativeloss) / factor, 0.0), 1.0) - return attach, detach +from globeop_ce_tranche import calculate_attach_detach def upload_citco_products(index, affected_series, fund, event_date, conn, event_name): diff --git a/sql/dawn.sql b/sql/dawn.sql index 3ef3d009..a76c3ebf 100644 --- a/sql/dawn.sql +++ b/sql/dawn.sql @@ -3890,7 +3890,7 @@ WHERE fund IN ('SERCGMAST', 'BOWDST') ORDER BY index, series, orig_attach; -CREATE OR REPLACE VIEW tranche_risk_citco +CREATE OR REPLACE VIEW public.tranche_risk_citco AS SELECT tranche_risk.date, tranche_risk.tranche_id AS trade_id, a.admin_id, @@ -3923,9 +3923,15 @@ AS SELECT tranche_risk.date, tranche_risk.hy_equiv, cds.initial_margin_percentage, tranche_risk.ir_dv01, + a.fix_id, cds.fund FROM tranche_risk LEFT JOIN cds ON tranche_risk.tranche_id = cds.id + LEFT JOIN LATERAL ( SELECT id_mapping.globeop_id + FROM id_mapping + WHERE id_mapping.serenitas_id = tranche_risk.tranche_id AND id_mapping.date <= tranche_risk.date + ORDER BY id_mapping.date DESC + LIMIT 1) b ON true FULL JOIN ( SELECT isosel_accrued.init_fix_id AS fix_id, isosel_accrued.init_order_id AS admin_id, isosel_accrued.period_end_date, @@ -3934,10 +3940,9 @@ AS SELECT tranche_risk.date, sum(- isosel_accrued."position") AS admin_notional FROM isosel_accrued WHERE isosel_accrued.liqd_date IS NULL - GROUP BY isosel_accrued.init_fix_id, isosel_accrued.init_order_id, isosel_accrued.period_end_date) a ON a.fix_id = concat('SCCDS', tranche_risk.tranche_id) AND a.period_end_date = tranche_risk.date + GROUP BY isosel_accrued.init_fix_id, isosel_accrued.init_order_id, isosel_accrued.period_end_date) a ON (a.fix_id = concat('SCCDS', tranche_risk.tranche_id) OR a.admin_id = b.globeop_id) AND a.period_end_date = tranche_risk.date LEFT JOIN index_version ON cds.security_id::text = index_version.redindexcode LEFT JOIN external_marks_deriv ON cds.cpty_id = external_marks_deriv.identifier AND external_marks_deriv.date = tranche_risk.date - WHERE cds.fund = ANY (ARRAY['ISOSEL'::fund, 'CRSE'::fund]) ORDER BY index_version.index, index_version.series, cds.orig_attach; CREATE TABLE isosel_accrued ( |
