aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/index.py34
-rw-r--r--python/tests/test_swaption.py2
2 files changed, 2 insertions, 34 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py
index efda3cb6..ee8aaa2a 100644
--- a/python/analytics/index.py
+++ b/python/analytics/index.py
@@ -83,36 +83,6 @@ class Index(object):
self._default_leg = ContingentLeg(self.start_date, d, 1)
self._end_date = d
- def forward_annuity(self, exercise_date):
- step_in_date = exercise_date + datetime.timedelta(days=1)
- value_date = (pd.Timestamp(exercise_date) + 3* BDay()).date()
- a = self._fee_leg.pv(self.trade_date, step_in_date, self.trade_date,
- self._yc, self._sc, False)
- Delta = self._fee_leg.accrued(step_in_date)
- df = self._yc.discount_factor(value_date)
- q = self._sc.survival_probability(exercise_date)
- return a - Delta * df * q
-
- def forward_spread(self, exercise_date):
- value_date = (pd.Timestamp(exercise_date) + 3* BDay()).date()
- df = self._yc.discount_factor(value_date)
- q = self._sc.survival_probability(exercise_date)
- return self._spread + (1 - self.recovery) * (1 - q) * df / self.forward_annuity(exercise_date)
-
- def forward_pv(self, exercise_date):
- """This is default adjusted forward price at time exercise_date"""
- step_in_date = exercise_date + datetime.timedelta(days=1)
- a = self._fee_leg.pv(self.trade_date, step_in_date, self.trade_date,
- self._yc, self._sc, False)
- Delta = self._fee_leg.accrued(step_in_date)
- value_date = (pd.Timestamp(exercise_date) + 3* BDay()).date()
- df = self._yc.discount_factor(value_date)
- q = self._sc.survival_probability(exercise_date)
- clean_forward_annuity = a - Delta * df * q
- forward_price = clean_forward_annuity * (self.spread - self.fixed_rate) * 1e-4
- fep = (1 - self.recovery) * (1-q)
- return self.notional * (forward_price / df + fep)
-
@property
def spread(self):
if self._spread is not None:
@@ -391,6 +361,4 @@ class ForwardIndex(object):
self._forward_pv = self._forward_pv / self.df + fep
self._forward_spread = self.index._spread + fep * self.df / self._forward_annuity
else:
- self._forward_annuity = None
- self._forward_pv = None
- self._forward_spread = None
+ self._forward_annuity, self._forward_pv, self._forward_spread = None, None, None
diff --git a/python/tests/test_swaption.py b/python/tests/test_swaption.py
index 908fe4d2..ae43d4ae 100644
--- a/python/tests/test_swaption.py
+++ b/python/tests/test_swaption.py
@@ -34,7 +34,7 @@ class TestPutCallParity(unittest.TestCase):
receiver.sigma = 0.416
df = self.index._yc.discount_factor(payer.exercise_date_settle)
self.assertAlmostEqual(payer.pv_black - receiver.pv_black,
- df * (self.index.forward_pv(self.exercise_date)/self.index.notional -
+ df * (payer.forward_pv/self.index.notional -
g(self.index, self.strike, self.exercise_date, payer._forward_yc)))
def test_calibration(self):