import unittest import datetime import sys sys.path.append('..') from analytics.index import g from analytics import Index, Swaption 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_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()