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.py33
1 files changed, 18 insertions, 15 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py
index c900900f..0908e854 100644
--- a/python/analytics/option.py
+++ b/python/analytics/option.py
@@ -168,11 +168,26 @@ class BlackSwaption(ForwardIndex):
def value_date(self, d):
self.index.value_date = d
strike, factor, cumloss = self._orig_params
+
if factor != self.index.factor:
cum_recovery = 100 * (factor - self.index.factor) - (
self.index.cumloss - cumloss
)
self.strike = (strike * factor - cum_recovery) / self.index.factor
+ else:
+ self._update_strike()
+
+ def _update_strike(self, K=None):
+ if self.index._quote_is_price:
+ if K:
+ self._G = (100 - K) / 100
+ self._strike = g(
+ self.index, self.index.fixed_rate, self.exercise_date, self._G
+ )
+ else:
+ if K:
+ self._strike = K
+ self._G = g(self.index, self._strike, self.exercise_date)
@property
def exercise_date(self):
@@ -182,12 +197,7 @@ class BlackSwaption(ForwardIndex):
def exercise_date(self, d):
self.forward_date = d
ForwardIndex.__init__(self, self.index, d)
- if self.index._quote_is_price:
- self._strike = g(
- self.index, self.index.fixed_rate, self.exercise_date, self._G
- )
- else:
- self._G = g(self.index, self._strike, self.exercise_date)
+ self._update_strike()
@property
def strike(self):
@@ -198,14 +208,7 @@ class BlackSwaption(ForwardIndex):
@strike.setter
def strike(self, K):
- if self.index._quote_is_price:
- self._G = (100 - K) / 100
- self._strike = g(
- self.index, self.index.fixed_rate, self.exercise_date, self._G
- )
- else:
- self._G = g(self.index, K, self.exercise_date)
- self._strike = K
+ self._update_strike(K)
@property
def atm_strike(self):
@@ -241,7 +244,7 @@ class BlackSwaption(ForwardIndex):
def intrinsic_value(self):
V = self.df * (self.forward_pv - self._G)
intrinsic = max(V, 0) if self.option_type == "payer" else max(-V, 0)
- return self._direction * intrinsic * self.notional
+ return self._direction * intrinsic * self.notional * self.index.factor
def __hash__(self):
return hash(