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