diff options
Diffstat (limited to 'python/tests')
| -rw-r--r-- | python/tests/test_index.py | 46 | ||||
| -rw-r--r-- | python/tests/test_swaption.py | 50 |
2 files changed, 63 insertions, 33 deletions
diff --git a/python/tests/test_index.py b/python/tests/test_index.py new file mode 100644 index 00000000..eaea83d6 --- /dev/null +++ b/python/tests/test_index.py @@ -0,0 +1,46 @@ +import unittest +import datetime +import numpy as np + +from pyisda.cdsone import upfront_charge +from pyisda.utils import build_yc +from pyisda.flat_hazard import strike_vec + +from analytics import Index +from analytics.index import g + +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) + + def test_strike(self): + """strike price equals clean_pv using 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_forward_pv(self): + """default adjusted forward price for trade_date equals clean pv """ + self.assertAlmostEqual(self.index.forward_pv(self.index.trade_date), + self.index.clean_pv) + +if __name__=="__main__": + unittest.main() 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() |
