diff options
| -rw-r--r-- | example.py | 50 |
1 files changed, 18 insertions, 32 deletions
@@ -1,52 +1,38 @@ from pyisda.curve import YieldCurve, BadDay, SpreadCurve -import sys -sys.path.append("/home/share/CorpCDOs/code/python") -from yieldcurve import getMarkitIRData, YC, rate_helpers import datetime -import array import math from pyisda.cdsone import upfront_charge, spread_from_upfront from pyisda.legs import FeeLeg, ContingentLeg +from pyisda.utils import build_yc +import array if __name__ == "__main__": # build zero coupon curve - markit_data = getMarkitIRData() - yield_helpers = rate_helpers(MarkitData = markit_data) - ql_yc = YC(MarkitData=markit_data) - today_date = datetime.date.today() + today_date = datetime.date(2016, 7, 12) + yc = build_yc(today_date, True) step_in_date = today_date + datetime.timedelta(days=1) - value_date = datetime.date(2016, 7, 13) # settle_date - periods, rates = zip(*markit_data['deposits']) - periods = list(periods) - rates = list(rates) - periods_swaps, rates_swaps = zip(*markit_data['swaps']) - types = 'M' * len(periods) + 'S' * len(periods_swaps) - rates = array.array('d', rates) - periods.extend(periods_swaps) - rates.extend(rates_swaps) + value_date = datetime.date(2016, 7, 15) # settle_date - zc = YieldCurve(today_date, types, periods, rates, 'ACT/360', '6M', - '3M', '30/360', 'ACT/360', BadDay.MODIFIED) start_date = datetime.date(2016, 6, 20) end_date = datetime.date(2021, 6, 20) upfront_quote = -0.03063 - spread = spread_from_upfront(today_date, today_date, today_date, step_in_date, - start_date, end_date, 0.05, zc, + spread = spread_from_upfront(today_date, value_date, start_date, step_in_date, + start_date, end_date, 0.05, yc, upfront_quote, 0.3) - upf = upfront_charge(today_date, today_date, today_date, step_in_date, - start_date, end_date, 0.05, zc, spread, 0.3) + #benchmark_start_date should be start_date. Not sure while there are 2 parameters + upf = upfront_charge(today_date, value_date, start_date, step_in_date, + start_date, end_date, 0.05, yc, spread, 0.3) print(spread) print(upf-upfront_quote) coupon_leg = FeeLeg(start_date, end_date, True, 1000000, 0.01) contingent_leg = ContingentLeg(start_date, end_date, 1000000) - print(contingent_leg.pay_type) - ig_spread = 0.0072175 + ig_spread = 0.0070 spread = array.array('d', [ig_spread]) print("build spread curve", flush=True) - sc = SpreadCurve(today_date, zc, today_date, step_in_date, + sc = SpreadCurve(today_date, yc, start_date, step_in_date, value_date, [end_date], spread, 0.4, 1) sc_data = sc.inspect()['data'] @@ -55,16 +41,16 @@ if __name__ == "__main__": continuous_rate = math.log(1+rate) sc2 = SpreadCurve.from_flat_hazard(today_date, continuous_rate) coupon_leg_pv = coupon_leg.pv(today_date, step_in_date, - value_date, zc, sc, True) + value_date, yc, sc, True) coupon_leg_pv2 = coupon_leg.pv(today_date, step_in_date, - today_date, zc, sc2, True) + value_date, yc, sc2, True) print("contingent leg pv", flush=True) contingent_leg_pv = contingent_leg.pv(today_date, step_in_date, - value_date, zc, sc, 0.4) + value_date, yc, sc, 0.4) contingent_leg_pv2 = contingent_leg.pv(today_date, step_in_date, - today_date, zc, sc2, 0.4) + value_date, yc, sc2, 0.4) print("upfront_charge", flush=True) - pv = 1000000 * upfront_charge(today_date, value_date, today_date, step_in_date, - start_date, end_date, 0.01, zc, ig_spread, 0.4) + pv = 1000000 * upfront_charge(today_date, value_date, start_date, step_in_date, + start_date, end_date, 0.01, yc, ig_spread, 0.4) print(pv, contingent_leg_pv-coupon_leg_pv) |
