diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/cds_rebook.py | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/python/cds_rebook.py b/python/cds_rebook.py index 6ea1bdb4..bb8b3e0c 100644 --- a/python/cds_rebook.py +++ b/python/cds_rebook.py @@ -7,7 +7,8 @@ from copy import copy def get_outstanding_positions(trade_date): r = dawn_engine.execute( - "SELECT security_id, notional, folder, nextredindexcode, currency, maturity " + "SELECT security_id, notional, folder, nextredindexcode, currency, " + "maturity, indexfactor " "FROM list_cds_positions_by_strat(%s) a " "JOIN index_version_markit " "ON a.security_id=index_version_markit.redindexcode " @@ -25,6 +26,9 @@ def default_adjustment(company_id, end_date): start_date, end_date, 1., 1.) return accrual_days, fee +PORTFOLIO = {"HYOPTDEL": "OPTIONS", + "HEDGE_MBS": "MORTGAGES"} + def rebook(trade_date, company_id): upfront_settle_date = trade_date + 3 * BDay() effective_date = trade_date + datetime.timedelta(days=1) @@ -33,18 +37,13 @@ def rebook(trade_date, company_id): index_new = CreditIndex(redcode=r['nextredindexcode'], maturity=r['maturity'], value_date=trade_date, - notional=-r['notional']) + notional=r['notional']) - if index_new.index_type == "HY": - n_constituents = 100 - elif index_new.index_type in ["EU", "IG"]: - n_constituents = 125 - elif index_new.index_type == "XO": - n_constituents = 75 - adj = (fee - accrual_days * index_new.fixed_rate * 1e-4 /360) \ - * r['notional'] * 1/n_constituents + adj = (fee - accrual_days * index_new.fixed_rate * 1e-4 /360) * \ + r['notional'] * (r['indexfactor'] - index_new.factor) index_new.mark() trade_new = {'action': 'NEW', + 'portfolio': PORTFOLIO[r['folder']], 'folder': r['folder'], 'cp_code': 'INTERCO', 'custodian': 'NONE', @@ -60,17 +59,19 @@ def rebook(trade_date, company_id): 'protection': index_new.direction, 'security_id': r['nextredindexcode'], 'security_desc': f"CDX {index_new.index_type} CDSI S{index_new.series} 5Y", - 'upfront': -index_new.pv, + 'upfront': index_new.pv, 'upfront_settle_date': upfront_settle_date, 'swap_type': 'CD_INDEX'} trade_prev = copy(trade_new) trade_prev['protection'] = "Seller" if trade_new['protection'] == "Buyer" else "Buyer" - trade_prev['upfront'] = index_new.pv - adj + trade_prev['upfront'] = adj - index_new.pv trade_prev['security_id'] = r['security_id'] sql_str = (f"INSERT INTO cds({','.join(trade_new.keys())}) " f"VALUES({','.join(['%s'] * len(trade_new))})") - dawn_engine.execute(sql_str, [trade_new.values(), trade_prev.values()]) + dawn_engine.execute(sql_str, [trade_prev.values(), trade_new.values()]) if __name__ == "__main__": # PKD - rebook(datetime.date(2019, 1, 24), 101148) + #rebook(datetime.date(2019, 1, 24), 101148) + # WINDSSE + rebook(datetime.date(2019, 4, 8), 36806879) |
