aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/index.py16
-rw-r--r--python/yieldcurve.py3
2 files changed, 11 insertions, 8 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py
index 2277b938..9ec3b7ac 100644
--- a/python/analytics/index.py
+++ b/python/analytics/index.py
@@ -88,11 +88,15 @@ class Index():
Unadjusted,
CDS)
- def survival_probability(self, d):
- if d > self.trade_date:
- return math.exp( - self.flat_hazard * (d - self.trade_date).days/365)
- else:
- return 1
+ 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._value_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(step_in_date)
+ return a - Delta * df * q
def forward_pv(self, exercise_date):
"""This is default adjusted forward price at time exercise_date"""
@@ -102,7 +106,7 @@ class Index():
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.survival_probability(exercise_date)
+ q = self._sc.survival_probability(exercise_date)
clean_forward_annuity = a - Delta * df * q
dl_pv = self._default_leg.pv(
self.trade_date, step_in_date, self._value_date,
diff --git a/python/yieldcurve.py b/python/yieldcurve.py
index 8c5431e3..c8d6ed01 100644
--- a/python/yieldcurve.py
+++ b/python/yieldcurve.py
@@ -100,8 +100,7 @@ def get_dates(date, currency="USD"):
def roll_yc(yc, forward_date):
"""returns the expected forward yield cuve on a forward_date"""
dates = get_dates(forward_date)
- df0 = yc.discount_factor(forward_date)
- dfs = array.array('d', [yc.discount_factor(d)/df0 for d in dates])
+ dfs = array.array('d', [yc.discount_factor(d, forward_date) for d in dates])
return YieldCurve.from_discount_factors(forward_date, dates, array.array('d', dfs), 'ACT/365F')
def YC(helpers = None, currency="USD", MarkitData=None):