diff options
Diffstat (limited to 'python/analytics/index.py')
| -rw-r--r-- | python/analytics/index.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py index ec967544..d085b140 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -173,7 +173,7 @@ class Index(): self._update() return val - self.price eta = 1.2 - a = 50*1e-4 if self.recovery == 0.4 else 250*1e-4 + a = self.fixed_rate*1e-4 * 0.5 b = a * eta while True: if handle(b, self, val) > 0: @@ -336,11 +336,12 @@ class Index(): class ForwardIndex(): - def __init__(self, index, forward_date): + def __init__(self, index, forward_date, ref_is_price = False): self.index = index self.forward_date = forward_date self.exercise_date_settle = (pd.Timestamp(forward_date) + 3* BDay()).date() self.df = index._yc.discount_factor(self.exercise_date_settle) + self._ref_is_price = ref_is_price self._update() @property @@ -357,13 +358,20 @@ class ForwardIndex(): @property def ref(self): - return self.index.spread + if ref_is_price: + return self.index.price + else: + return self.index.spread @ref.setter def ref(self, val : float): - if val != self.index.spread: - self.index.spread = val - self._update() + if self._ref_is_price: + if math.abs(self.index.price - val) > 1e-6: + self.index.price = val + else: + if val != self.index.spread: + self.index.spread = val + self._update() def _update(self): if self.index._sc is not None: |
