aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/index.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/index.py')
-rw-r--r--python/analytics/index.py21
1 files changed, 14 insertions, 7 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py
index 9d6e289a..1b385f84 100644
--- a/python/analytics/index.py
+++ b/python/analytics/index.py
@@ -5,6 +5,7 @@ import math
import numpy as np
import pandas as pd
import warnings
+import yieldcurve
from dateutil.relativedelta import relativedelta
from pyisda.legs import ContingentLeg, FeeLeg
@@ -298,14 +299,20 @@ class Index(object):
@trade_date.setter
def trade_date(self, d):
- settings = Settings()
- settings.evaluation_date = Date.from_datetime(d)
+ prebuilt_curves = getattr(yieldcurve, '_{}_curves'.format(self.currency))
self.start_date = previous_twentieth(d)
- # self._helpers = rate_helpers(self.currency)
- # self._ql_yc = YC(self._helpers)
- # self._yc = ql_to_jp(self._ql_yc)
- ql_yc = YC(currency = self.currency)
- self._yc = ql_to_jp(ql_yc)
+ if d in prebuilt_curves:
+ self._yc = prebuilt_curves[d]
+ else:
+ print("cache miss for date: {}".format(d))
+ settings = Settings()
+ settings.evaluation_date = Date.from_datetime(d)
+ # self._helpers = rate_helpers(self.currency)
+ # self._ql_yc = YC(self._helpers)
+ # self._yc = ql_to_jp(self._ql_yc)
+ ql_yc = YC(currency=self.currency)
+ self._yc = ql_to_jp(ql_yc)
+ prebuilt_curves[d] = self._yc
# use the rolled forward curve if we price something in the future
if self._yc.base_date < d:
self._yc = self._yc.expected_forward_curve(d)