diff options
Diffstat (limited to 'python/analytics/index.py')
| -rw-r--r-- | python/analytics/index.py | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py index d085b140..56ab4704 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -59,6 +59,7 @@ class Index(): self._sc = None self._risky_annuity = None self._spread = None + self._price = None self.name = None @property @@ -168,19 +169,20 @@ class Index(): @price.setter def price(self, val): - def handle(x, self, val): - self._spread = x + if self._price is None or math.fabs(val, self._price) > 1e-6: + def handle(x, self, val): + self._spread = x + self._update() + return val - self.price + eta = 1.2 + a = self.fixed_rate*1e-4 * 0.5 + b = a * eta + while True: + if handle(b, self, val) > 0: + break + b *= eta + self._spread = brentq(handle, a, b, args = (self, val)) self._update() - return val - self.price - eta = 1.2 - a = self.fixed_rate*1e-4 * 0.5 - b = a * eta - while True: - if handle(b, self, val) > 0: - break - b *= eta - self._spread = brentq(handle, a, b, args = (self, val)) - self._update() @property def DV01(self): @@ -366,10 +368,12 @@ class ForwardIndex(): @ref.setter def ref(self, val : float): if self._ref_is_price: - if math.abs(self.index.price - val) > 1e-6: + if self.index.price is None or \ + math.fabs(self.index.price - val) > 1e-6: self.index.price = val + self._update() else: - if val != self.index.spread: + if self.index.spread is None or val != self.index.spread: self.index.spread = val self._update() |
