diff options
| -rw-r--r-- | python/yieldcurve.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/python/yieldcurve.py b/python/yieldcurve.py index 86bfef34..70078e8f 100644 --- a/python/yieldcurve.py +++ b/python/yieldcurve.py @@ -1,3 +1,4 @@ +from blist import sorteddict from contextlib import closing from itertools import islice import datetime @@ -22,7 +23,7 @@ from pyisda.curve import YieldCurve, BadDay import warnings def load_curves(currency="USD", date=None): - """load the prebuilt curve from the database""" + """load the prebuilt curves from the database""" if date: sql_str = "SELECT curve FROM {}_curves WHERE effective_date=%s".format(currency) else: @@ -36,8 +37,9 @@ def load_curves(currency="USD", date=None): return YieldCurve.from_bytes(lz4.block.decompress(curve)) else: c.execute(sql_str) - return {d: YieldCurve.from_bytes(lz4.block.decompress(curve)) - for d, curve in c} + return sorteddict([ + (d, YieldCurve.from_bytes(lz4.block.decompress(curve))) + for d, curve in c]) def get_curve(effective_date, currency="USD"): if f'_{currency}_curves' in globals(): @@ -46,6 +48,9 @@ def get_curve(effective_date, currency="USD"): curves = globals()[f'_{currency}_curves'] = load_curves("USD") if isinstance(effective_date, datetime.datetime): effective_date = effective_date.date() + if effective_date > curves.keys()[-1]: + last_curve = curves[curves.keys()[-1]] + return last_curve if effective_date in curves: return curves[effective_date] else: @@ -74,7 +79,7 @@ def getMarkitIRData(effective_date=datetime.date.today(), if rate is not None]} return MarkitData -def get_futures_data(date = datetime.date.today()): +def get_futures_data(date=datetime.date.today()): futures_file = os.path.join(os.environ['DATA_DIR'], "Yield Curves", "futures-{0:%Y-%m-%d}.csv".format(date)) with open(futures_file) as fh: @@ -151,8 +156,8 @@ def YC(helpers=None, currency="USD", MarkitData=None, evaluation_date=None): if helpers is None: helpers = rate_helpers(currency, MarkitData, evaluation_date) calendar = WeekendsOnly() - settings = Settings() if evaluation_date: + settings = Settings() settings.evaluation_date = Date.from_datetime(evaluation_date) return PiecewiseYieldCurve(BootstrapTrait.Discount, Interpolator.LogLinear, 0, calendar, helpers, Actual365Fixed()) |
