diff options
Diffstat (limited to 'python/analytics/option.py')
| -rw-r--r-- | python/analytics/option.py | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py index e8f975fa..9a544162 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -277,16 +277,28 @@ class Swaption(ForwardIndex): def breakeven(self): pv = self.pv / self.notional if self._strike_is_price: - return self._G + pv + if self.option_type == "payer": + return 100-(self._G + pv)*100 + else: + return 100-(self._G - pv)*100 else: - aux = lambda S: g(self.index, S, self.exercise_date) - self._G - pv eta = 1.1 a = self._strike - b = a * eta + if self.option_type == "payer": + aux = lambda S: g(self.index, S, self.exercise_date) - (self._G + pv) + b = a * eta + else: + aux = lambda S: g(self.index, S, self.exercise_date) - (self._G - pv) + b = a / eta while True: - if aux(b) > 0: - break - b *= eta + 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) @@ -328,6 +340,10 @@ class Swaption(ForwardIndex): self.vega, "Theta", self.theta), + "{:<20}\t{:>15.3f}\t\t{:<20}\t{:>10.0f}".format("Breakeven", + self.breakeven, + "Days to Exercise", + self.T*365), "" ] return "\n".join(s) |
