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