aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/option.py7
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))