diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/index.py | 34 |
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" |
