diff options
Diffstat (limited to 'python/tests/test_swaption.py')
| -rw-r--r-- | python/tests/test_swaption.py | 50 |
1 files changed, 17 insertions, 33 deletions
diff --git a/python/tests/test_swaption.py b/python/tests/test_swaption.py index 10c07249..46ba83b0 100644 --- a/python/tests/test_swaption.py +++ b/python/tests/test_swaption.py @@ -1,43 +1,27 @@ import unittest -from pyisda.cdsone import upfront_charge -from pyisda.utils import build_yc -from pyisda.flat_hazard import strike_vec import datetime -import numpy as np import sys sys.path.append('..') -from analytics import Index -from analytics.option import g +from analytics.index import g +from analytics import Index, Swaption -class TestStrike(unittest.TestCase): - index = Index.from_name("ig", 26, "5yr", - trade_date = datetime.date(2016, 7, 1)) - index.notional = 50e6 - index.spread = 75 - exercise_date = datetime.date(2016, 8, 19) +class TestPutCallParity(unittest.TestCase): + index = Index.from_name("ig", 27, "5yr", + trade_date = datetime.date(2016, 10, 25)) + index.spread = 74 + exercise_date = datetime.date(2016, 12, 21) + strike = 82.5 - def test_strike(self): - """ check if strike price is the same as computing the pv - with the expected forward yield curve.""" - strike = g(self.index, self.index.spread, self.exercise_date, False) * self.index.notional - old_yc = self.index._yc - self.index.trade_date = self.exercise_date - self.index._yc = old_yc.expected_forward_curve(self.exercise_date) - self.index.spread = 75 - self.assertAlmostEqual(self.index.clean_pv, strike) - - def test_strike_vec(self): - self.index.trade_date = datetime.date(2016, 8, 19) - a, b = strike_vec(np.array([70, 75])*1e-4, self.index._yc, self.index.trade_date, - self.index._value_date, self.index.start_date, self.index.end_date, - self.index.recovery) - r = (a - self.index.fixed_rate*1e-4 * b) - self.index.notional = 1 - self.index.spread = 70 - self.assertAlmostEqual(self.index.clean_pv, r[0]) - self.index.spread = 75 - self.assertAlmostEqual(self.index.clean_pv, r[1]) + def test_parity(self): + payer = Swaption(self.index, self.exercise_date, self.strike) + receiver = Swaption(self.index, self.exercise_date, self.strike, "receiver") + payer.sigma = 0.416 + receiver.sigma = 0.416 + df = self.index._yc.discount_factor(payer.exercise_date_settle) + self.assertAlmostEqual(payer.pv - receiver.pv, + df * (self.index.forward_pv(self.exercise_date)/self.index.notional - + g(self.index, self.strike, self.exercise_date))) if __name__=="__main__": unittest.main() |
