diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/globeop_ce_tranche.py | 39 |
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 + ) |
