diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/utils.py | 15 | ||||
| -rw-r--r-- | python/cds_curve.py | 4 |
2 files changed, 14 insertions, 5 deletions
diff --git a/python/analytics/utils.py b/python/analytics/utils.py index 07975af8..bd390255 100644 --- a/python/analytics/utils.py +++ b/python/analytics/utils.py @@ -3,6 +3,7 @@ import pandas as pd from scipy.special import h_roots from dateutil.relativedelta import relativedelta import datetime +from pyisda.date import pydate_to_TDate def GHquad(n): """Gauss-Hermite quadrature weights""" @@ -27,7 +28,7 @@ def next_twentieth(d): r += relativedelta(months=3 - mod) return r -def roll_date(d, tenor): +def roll_date(d, tenor, nd_array=False): """ roll date d to the next CDS maturity""" cutoff = pd.Timestamp('2015-12-20') if not isinstance(d, pd.Timestamp): @@ -37,7 +38,11 @@ def roll_date(d, tenor): d_rolled = d + relativedelta(years=tenor, days=1) return next_twentieth(d_rolled) elif hasattr(tenor, '__iter__'): - d_rolled = [next_twentieth(d + relativedelta(years=t, days=1)) for t in tenor] + v = [next_twentieth(d + relativedelta(years=t, days=1)) for t in tenor] + if nd_array: + return np.array([pydate_to_TDate(d) for d in v]) + else: + return v else: raise TypeError('tenor is not a number nor an iterable') else: #semi-annual rolling starting 2015-12-20 @@ -57,7 +62,11 @@ def roll_date(d, tenor): if isinstance(tenor, (int, float)): return d_rolled else: - return [d_rolled + relativedelta(years=t-1) for t in tenor] + v = [d_rolled + relativedelta(years=t-1) for t in tenor] + if nd_array: + return np.array([pydate_to_TDate(d) for d in v]) + else: + return v def build_table(rows, format_strings, row_format): r = [] diff --git a/python/cds_curve.py b/python/cds_curve.py index d7313e5c..a0d14089 100644 --- a/python/cds_curve.py +++ b/python/cds_curve.py @@ -38,7 +38,7 @@ def build_curve(r, today_date, yc, start_date, step_in_date, value_date, end_dat sc = fill_curve(sc, end_dates) except ValueError as e: print(e) - import pdb;pdb.set_trace() + return (r['cds_ticker'], None) return (r['cds_ticker'], sc) def grouper(iterable, n, fillvalue=None): @@ -58,7 +58,7 @@ def build_curves(quotes, args): return [build_curve(q, *args) for q in quotes if q is not None] def get_singlenames_curves(index_type, series, trade_date): - end_dates = roll_date(trade_date, [1, 2, 3, 4, 5, 7, 10]) + end_dates = roll_date(trade_date, [1, 2, 3, 4, 5, 7, 10], nd_array=True) sn_quotes = get_singlenames_quotes("{}{}".format(index_type.lower(), series), trade_date.date()) Settings().evaluation_date = Date.from_datetime(trade_date) |
