aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/option.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/option.py')
-rw-r--r--python/analytics/option.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py
index 60861c99..e8f975fa 100644
--- a/python/analytics/option.py
+++ b/python/analytics/option.py
@@ -163,6 +163,9 @@ class Swaption(ForwardIndex):
if val < self.intrinsic_value:
raise ValueError("{}: is less than intrinsic value: {}".
format(val, self.intrinsic_value))
+ elif val == self.intrinsic_value:
+ self.sigma = 0
+ return
def handle(x):
self.sigma = x
return self.pv - val
@@ -184,12 +187,15 @@ class Swaption(ForwardIndex):
@property
def pv_black(self):
"""compute pv using black-scholes formula"""
- strike_tilde = self.index.fixed_rate * 1e-4 + self._G / self.forward_annuity * self.df
- return self.forward_annuity * black(self.forward_spread * 1e-4,
- strike_tilde,
- self.T,
- self.sigma,
- self.option_type) * self.notional
+ if self.sigma == 0:
+ return self.intrinsic_value
+ else:
+ strike_tilde = self.index.fixed_rate * 1e-4 + self._G / self.forward_annuity * self.df
+ return self.forward_annuity * black(self.forward_spread * 1e-4,
+ strike_tilde,
+ self.T,
+ self.sigma,
+ self.option_type) * self.notional
@pv_black.setter
def pv_black(self, val):
if np.isnan(val):