aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/index.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/index.py')
-rw-r--r--python/analytics/index.py34
1 files changed, 22 insertions, 12 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py
index 400c381f..03a4c482 100644
--- a/python/analytics/index.py
+++ b/python/analytics/index.py
@@ -291,17 +291,27 @@ class Index(object):
days_accrued * self.fixed_rate * 1e-4)
@classmethod
- def from_name(cls, index, series, tenor, trade_date=datetime.date.today(),
- notional=10_000_000):
+ def from_name(cls, index=None, series=None, tenor=None, trade_date=datetime.date.today(),
+ notional=10_000_000, redcode=None):
+ if all([index, series, tenor]):
+ sql_str = "SELECT indexfactor, lastdate, maturity, coupon " \
+ "FROM index_desc WHERE index=%s AND series=%s AND tenor = %s " \
+ "ORDER BY lastdate ASC"
+ params = (index.upper(), series, tenor)
+ elif redcode:
+ sql_str = "SELECT index, series, indexfactor, lastdate, maturity, coupon " \
+ "FROM index_desc WHERE redindexcode=%s"
+ params = (redcode,)
+ else:
+ raise ValueError("Need to provide either index, series, and tenor or redcode")
try:
- df = pd.read_sql_query(
- "SELECT indexfactor, lastdate, maturity, coupon " \
- "FROM index_desc WHERE index=%s AND series=%s AND tenor = %s "
- "ORDER BY lastdate ASC",
- engine, parse_dates=['lastdate'],
- params=(index.upper(), series, tenor))
+ df = pd.read_sql_query(sql_str,
+ engine, parse_dates=['lastdate'],
+ params=params)
maturity = df.maturity[0]
coupon = df.coupon[0]
+ index_type = index.upper() if index else df.loc[0,'index']
+ series = series if series else df.series[0]
df.loc[df.lastdate.isnull(),'lastdate'] = maturity
factor = df.loc[df.lastdate >= pd.Timestamp(trade_date),
'indexfactor'].iat[0]/100
@@ -309,16 +319,16 @@ class Index(object):
print(e)
return None
else:
- recovery = 0.4 if index.lower() == "ig" else 0.3
+ recovery = 0.4 if index_type == "IG" else 0.3
instance = cls(trade_date, maturity, recovery, coupon, notional,
- index.upper()=="HY")
+ index_type=="HY")
instance.factor = factor
instance.direction = "Buyer"
instance.name = "MARKIT CDX.NA.{}.{} {:%m/%y} ".format(
- index.upper(),
+ index_type,
series,
maturity)
- if index.upper() in ["IG", "HY"]:
+ if index_type in ["IG", "HY"]:
instance.currency = "USD"
else:
instance.currency = "EUR"