diff options
Diffstat (limited to 'python/analytics/tranche_functions.py')
| -rw-r--r-- | python/analytics/tranche_functions.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/python/analytics/tranche_functions.py b/python/analytics/tranche_functions.py index d4c38097..9ccd0e63 100644 --- a/python/analytics/tranche_functions.py +++ b/python/analytics/tranche_functions.py @@ -339,7 +339,6 @@ def tranche_pl_trunc(EL, cs, K1, K2, scaled=False): def tranche_pv(L, R, cs, K1, K2): return tranche_pl(L, cs, K1, K2) + tranche_cl(L, R, cs, K2, K2) - def credit_schedule(tradedate, tenor, coupon, yc, enddate=None): tradedate = pydate_to_qldate(tradedate) if enddate is None: @@ -348,14 +347,20 @@ def credit_schedule(tradedate, tenor, coupon, yc, enddate=None): enddate = pydate_to_qldate(enddate) cal = WeekendsOnly() DC = Actual360() - sched = Schedule.from_rule(tradedate + 1, enddate, Period('3M'), cal, + start_date = tradedate + 1 + sched = Schedule.from_rule(tradedate, enddate, Period('3M'), cal, ModifiedFollowing, Unadjusted, CDS2015) dates = sched.to_npdates() pydates = dates.astype('O') - df = [yc.discount_factor(d) for d in pydates if d > tradedate + 1] - coupons = [DC.year_fraction(d1, d2) * coupon for d1, d2 in zip(sched[:-2], sched[1:-1])] + df = [yc.discount_factor(d) for d in pydates if d > start_date] + coupons = [DC.year_fraction(d1, d2) * coupon for d1, d2 in zip(sched[:-2], sched[1:-1]) + if d2 > start_date] coupons.append(Actual360(True).year_fraction(sched[-2], sched[-1]) * coupon) - return pd.DataFrame({"df": df, "coupons": coupons}, dates[1:]) + if dates[1] <= start_date: + dates = dates[2:] + else: + dates = dates[1:] + return pd.DataFrame({"df": df, "coupons": coupons}, index=dates) def cds_accrued(tradedate, coupon): |
