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()