aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics')
-rw-r--r--python/analytics/option.py28
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)