aboutsummaryrefslogtreecommitdiffstats
path: root/python/cds_rebook.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/cds_rebook.py')
-rw-r--r--python/cds_rebook.py29
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)