diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/index.py | 21 |
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) |
