aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/analytics/index.py20
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: