diff options
Diffstat (limited to 'python/analytics/option.py')
| -rw-r--r-- | python/analytics/option.py | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py index ebbf6303..6cc8a7a7 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -232,29 +232,16 @@ class BlackSwaption(ForwardIndex): pv = self.pv / self.notional if self.index._quote_is_price: if self.option_type == "payer": - return 100-(self._G + pv)*100 + return 100 * (1 - self._G - pv) else: - return 100-(self._G - pv)*100 + return 100 * (1 - self._G + pv) else: - eta = 1.1 - a = self._strike if self.option_type == "payer": - aux = lambda S: g(self.index, S, self.exercise_date) - (self._G + pv) - b = a * eta + return g(self.index, self.index.fixed_rate, self.exercise_date, + pv=self._G + pv) else: - aux = lambda S: g(self.index, S, self.exercise_date) - (self._G - pv) - b = a / eta - while True: - if self.option_type == "payer": - if aux(b) > 0: - break - b *= eta - else: - if aux(b) < 0: - break - b /= eta - - return brentq(aux, a, b) + return g(self.index, self.index.fixed_rate, self.exercise_date, + pv=self._G - pv) def __repr__(self): s = ["{:<20}{}".format(self.index.name, self.option_type), |
