aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/analytics/utils.py15
-rw-r--r--python/cds_curve.py4
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)