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