From 73f9575423454d8ae7724db639fd6fda39c36f55 Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Mon, 11 Jul 2016 16:58:42 -0400 Subject: update example --- example.py | 56 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 14 deletions(-) (limited to 'example.py') diff --git a/example.py b/example.py index ab648d8..f39571e 100644 --- a/example.py +++ b/example.py @@ -1,16 +1,21 @@ -from pyisda.curve import ZeroCurve, BadDay, SpreadCurve +from pyisda.curve import YieldCurve, BadDay, SpreadCurve import sys sys.path.append("/home/share/CorpCDOs/code/python") -from yieldcurve import getMarkitIRData +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 if __name__ == "__main__": # build zero coupon curve markit_data = getMarkitIRData() - date = datetime.date.today() + yield_helpers = rate_helpers(MarkitData = markit_data) + ql_yc = YC(MarkitData=markit_data) + today_date = datetime.date.today() + 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) @@ -19,24 +24,47 @@ if __name__ == "__main__": rates = array.array('d', rates) periods.extend(periods_swaps) rates.extend(rates_swaps) - zc = ZeroCurve(date, types, periods, rates, 'ACT/360', '6M', - '3M', 'ACT/360', 'ACT/360', BadDay.MODIFIED) - start_date = datetime.date(2016, 3, 21) + 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(date, date, date, date+datetime.timedelta(days=1), + spread = spread_from_upfront(today_date, today_date, today_date, step_in_date, start_date, end_date, 0.05, zc, upfront_quote, 0.3) - upf = upfront_charge(date, date, date, date+datetime.timedelta(days=1), + upf = upfront_charge(today_date, today_date, today_date, step_in_date, start_date, end_date, 0.05, zc, spread, 0.3) print(spread) print(upf-upfront_quote) - coupon_leg = FeeLeg(start_date, end_date, True, 1000000, 0.05) - spread = array.array('d', [0.007725]) - print("pomme") - step_in_date = date + datetime.timedelta(days=1) - sc = SpreadCurve(date, zc, start_date, step_in_date, - datetime.date(2016, 7, 6), + 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 + spread = array.array('d', [ig_spread]) + + print("build spread curve", flush=True) + sc = SpreadCurve(today_date, zc, today_date, step_in_date, + value_date, [end_date], spread, 0.4, 1) + sc_data = sc.inspect()['data'] + rate = sc_data[0][1] + # by default the rate is stored as annually compounded + 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) + coupon_leg_pv2 = coupon_leg.pv(today_date, step_in_date, + today_date, zc, 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) + contingent_leg_pv2 = contingent_leg.pv(today_date, step_in_date, + today_date, zc, 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) + + print(pv, contingent_leg_pv-coupon_leg_pv) -- cgit v1.2.3-70-g09d2