aboutsummaryrefslogtreecommitdiffstats
path: root/python/globeop_ce_tranche.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/globeop_ce_tranche.py')
-rw-r--r--python/globeop_ce_tranche.py39
1 files changed, 38 insertions, 1 deletions
diff --git a/python/globeop_ce_tranche.py b/python/globeop_ce_tranche.py
index b54608ec..34faa63d 100644
--- a/python/globeop_ce_tranche.py
+++ b/python/globeop_ce_tranche.py
@@ -53,6 +53,41 @@ def upload_new_trades(index, affected_series, fund, event_date, conn, event_name
trade = CDSDeal.from_dict(**d)
service.push_trade(trade, "NEW")
service.build_buffer(trade_type="cds")
+ service.staging_queue.clear()
+
+
+def terminate_old_trades(
+ index, affected_series, fund, event_date, settlement_date, conn, event_name
+):
+ OLD_TRADES_QUERY = "SELECT trg.*, coalesce(tc.principal,0) + coalesce(tc.accrued,0) as event_cashflow FROM tranche_risk_globeop trg LEFT JOIN (SELECT principal, accrued, tranche_id FROM tranche_cashflows WHERE date=%s) tc ON trg.trade_id=tc.tranche_id WHERE trg.date=%s AND trg.fund=%s AND trg.index=%s AND trg.series in %s"
+
+ with conn.cursor() as c:
+ c.execute(
+ OLD_TRADES_QUERY,
+ (settlement_date, event_date, fund, index, affected_series),
+ )
+ trade_defaults = {
+ "Deal Type": "CreditDefaultSwapDeal",
+ "Action": "Update",
+ "Client": "Serenitas",
+ "TerminationDate": event_date,
+ "SubAction": "Termination",
+ "PartialTermination": "N",
+ }
+ service = Service[fund]
+ for row in c:
+ d = row._asdict() | trade_defaults
+ d["TerminationAmount"] = abs(d["notional"]) * d["tranche_factor"]
+ total_cashflow = (
+ d["serenitas_clean_nav"] + d["serenitas_accrued"] + d["event_cashflow"]
+ )
+ d["FeesPaid" if total_cashflow < 0 else "FeesReceived"] = abs(
+ total_cashflow
+ )
+ d["Deal Id"] = f"GO:{d['globeop_id']}"
+ service.staging_queue.append(d)
+ service.build_buffer(trade_type=("cds", "A"))
+ service.staging_queue.clear()
if __name__ == "__main__":
@@ -72,4 +107,6 @@ if __name__ == "__main__":
conn = dbconn("dawndb")
upload_new_trades(index, affected_series, fund, event_date, conn, event_name)
- # terminate_old_trades(index, affected_series, fund, event_date, )
+ terminate_old_trades(
+ index, affected_series, fund, event_date, settlement_date, conn, event_name
+ )