aboutsummaryrefslogtreecommitdiffstats
path: root/python/test_option.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/test_option.py')
-rw-r--r--python/test_option.py73
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))