diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/option.py | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py index 50802b3d..7be140a9 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -162,7 +162,8 @@ class BlackSwaption(ForwardIndex): @property def intrinsic_value(self): V = self.df * (self.forward_pv - self._G) - return max(V, 0) if self.option_type == "payer" else max(-V, 0) + intrinsic = max(V, 0) if self.option_type == "payer" else max(-V, 0) + return self._direction * intrinsic def __hash__(self): return hash(dumps([v for k, v in self.__dict__.items() if k not in @@ -186,7 +187,7 @@ class BlackSwaption(ForwardIndex): def pv(self, val): if np.isnan(val): raise ValueError("val is nan") - if val < self.intrinsic_value: + if self._direction * (val - self.intrinsic_value) < 0: raise ValueError("{}: is less than intrinsic value: {}". format(val, self.intrinsic_value)) elif val == self.intrinsic_value: @@ -344,7 +345,7 @@ class Swaption(BlackSwaption): S0 = brentq(calib, a, b, args) if T == 0: - return self.notional * self.intrinsic + return self.notional * self.intrinsic_value ## Zstar solves S_0 exp(-\sigma^2/2 * T + sigma * Z^\star\sqrt{T}) = strike Zstar = (math.log(self._strike/S0) + self.sigma**2/2 * T) / \ (self.sigma * math.sqrt(T)) |
