aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/yieldcurve.py15
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())