diff options
Diffstat (limited to 'python/test_option.py')
| -rw-r--r-- | python/test_option.py | 73 |
1 files changed, 20 insertions, 53 deletions
diff --git a/python/test_option.py b/python/test_option.py index 061be7c8..daa52d81 100644 --- a/python/test_option.py +++ b/python/test_option.py @@ -1,24 +1,22 @@ -from pyisda.curve import YieldCurve, BadDay, SpreadCurve from pyisda.utils import build_yc -from pyisda.cdsone import upfront_charge -from pyisda.legs import ContingentLeg, FeeLeg + from quantlib.settings import Settings from quantlib.time.api import ( Date, today, Period, Years, WeekendsOnly, Quarterly, CDS, Actual360, - ModifiedFollowing, Actual365Fixed) + ModifiedFollowing, Actual365Fixed, Months) from quantlib.quotes import SimpleQuote from quantlib.termstructures.credit.api import ( SpreadCdsHelper, Interpolator, ProbabilityTrait, PiecewiseDefaultCurve ) -from quantlib.termstructures.yields.api import YieldTermStructure +from quantlib.termstructures.yields.api import YieldTermStructure, DepositRateHelper from quantlib.pricingengines.credit.isda_cds_engine import IsdaCdsEngine import datetime -import array import math import numpy as np import pandas as pd +from pandas.tseries.offsets import BusinessDay as BDay from db import dbengine from yieldcurve import YC -import pdb +from swaption import Index def get_spread(index, series): engine = dbengine("serenitasdb") @@ -34,6 +32,7 @@ def get_spread(index, series): def test_sc(df): settings = Settings() + settings.evaluation_date = today() tenors = [Period(3, Years), Period(5, Years), Period(7, Years), Period(10, Years)] quotes = [] for i in range(4): @@ -47,16 +46,17 @@ def test_sc(df): pdc = PiecewiseDefaultCurve(ProbabilityTrait.SurvivalProbability, Interpolator.LogLinear, 0, WeekendsOnly(), helpers, Actual365Fixed()) + ts = YC() + yts.link_to(ts) for r in df.itertuples(index=True, name = None): settings.evaluation_date = Date.from_datetime(r[0]) ts = YC() yts.link_to(ts) for i in range(4): quotes[i].value = r[i+1] *1e-4 - return helpers + print(pdc.dates) + print(pdc.data) -def FEP(sc, recovery): - pass if __name__ == "__main__": settings = Settings() @@ -64,47 +64,14 @@ if __name__ == "__main__": settings.evaluation_date = today() start_date = datetime.date(2016, 6, 20) term_date = datetime.date(2021, 6, 20) - - dc = YC() - isda_engine = "po" - value_date = trade_date + recovery = 0.4 + fixed_rate = 0.01 + ig26 = Index(start_date, term_date, recovery, fixed_rate) yc = build_yc(trade_date, True) - spread = 0.007 - spread = array.array('d', [spread]) - value_date = datetime.date(2016, 7, 29) - step_in_date = trade_date + datetime.timedelta(days=1) - sc = SpreadCurve(trade_date, yc, start_date, step_in_date, - value_date, [term_date], spread, 0.4, True) - sc_data = sc.inspect()['data'] - hazard_rate = math.log(1 + sc_data[0][1]) - expiration_date = datetime.date(2016, 9, 21) - fee_leg = FeeLeg(start_date, term_date, True, 1, 1) - default_leg = ContingentLeg(start_date, term_date, 1) - fee_leg_expiry = FeeLeg(start_date, expiration_date, True, 1, 1) - default_leg_expiry = ContingentLeg(start_date, expiration_date, 1) - - fee_leg_pv = fee_leg.pv(trade_date, step_in_date, trade_date, - yc, sc, True) - default_leg_pv = default_leg.pv(trade_date, step_in_date, trade_date, - yc, sc, 0.4) - V1 = default_leg_pv - fee_leg_pv - - fee_leg_expiry_pv = fee_leg_expiry.pv(trade_date, step_in_date, trade_date, - yc, sc, True) - default_leg_expiry_pv = default_leg_expiry.pv(trade_date, step_in_date, trade_date, - yc, sc, 0.4) - V2 = default_leg_expiry_pv - fee_leg_expiry_pv - - forward_annuity = fee_leg.pv(trade_date, expiration_date+datetime.timedelta(days=1), trade_date, - yc, sc, True) - exercise_settlement = datetime.date(2016, 9, 25) - print((0.007-0.01) * forward_annuity) - - forward_price = forward_annuity*(0.007-0.01) / ( - yc.discount_factor(exercise_settlement)*math.exp(-hazard_rate * (expiration_date-trade_date).days/365 - )) - print(fee_leg.pv(trade_date, step_in_date, trade_date, - yc, sc, True)) - - print(fee_leg.pv(trade_date, expiration_date + datetime.timedelta(days=1), trade_date, - yc, sc, True)) + exercise_date = datetime.date(2016, 10, 19) + exercise_date_settle = pd.Timestamp(exercise_date + 3* BDay()).date() + spread = np.array([65, 70, 72.5, 75, 77.5, 80, 85, 90, 95, 100, 110, 120, 130, 140]) + tailprob = np.array([64.2, 51.7, 45.8, 40.2, 35, 30.4, 23.2, 18, 14.3, 11.6, 7.9, 5.6, 4.1, 3]) + cumprob = 1-tailprob/100 + hist = cumprob/spread + hist = np.hstack((0, hist)) |
