aboutsummaryrefslogtreecommitdiffstats
path: root/python/tests/test_swaption.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/tests/test_swaption.py')
-rw-r--r--python/tests/test_swaption.py63
1 files changed, 39 insertions, 24 deletions
diff --git a/python/tests/test_swaption.py b/python/tests/test_swaption.py
index 40237b79..64b7e71c 100644
--- a/python/tests/test_swaption.py
+++ b/python/tests/test_swaption.py
@@ -2,14 +2,14 @@ import unittest
import datetime
import sys
-sys.path.append('..')
+
+sys.path.append("..")
from analytics.index import g
from analytics import CreditIndex, Swaption, BlackSwaption
class TestPutCallParity(unittest.TestCase):
- index = CreditIndex("ig", 27, "5yr",
- value_date=datetime.date(2016, 10, 25))
+ index = CreditIndex("ig", 27, "5yr", value_date=datetime.date(2016, 10, 25))
index.spread = 74
exercise_date = datetime.date(2017, 3, 15)
strike = 82.5
@@ -20,19 +20,23 @@ class TestPutCallParity(unittest.TestCase):
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 * (payer.forward_pv -
- g(self.index, self.strike, self.exercise_date)))
+ self.assertAlmostEqual(
+ payer.pv - receiver.pv,
+ df * (payer.forward_pv - g(self.index, self.strike, self.exercise_date)),
+ )
def test_parity_black(self):
payer = BlackSwaption(self.index, self.exercise_date, self.strike)
- receiver = BlackSwaption(self.index, self.exercise_date, self.strike, "receiver")
+ receiver = BlackSwaption(
+ 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 * (payer.forward_pv -
- g(self.index, self.strike, self.exercise_date)))
+ self.assertAlmostEqual(
+ payer.pv - receiver.pv,
+ df * (payer.forward_pv - g(self.index, self.strike, self.exercise_date)),
+ )
def test_calibration(self):
payer = Swaption(self.index, self.exercise_date, self.strike)
@@ -43,8 +47,7 @@ class TestPutCallParity(unittest.TestCase):
self.assertAlmostEqual(payer.sigma, 0.37648716)
def test_hy(self):
- index = CreditIndex("hy", 27, "5yr",
- value_date=datetime.date(2016, 11, 8))
+ index = CreditIndex("hy", 27, "5yr", value_date=datetime.date(2016, 11, 8))
index.price = 103.875
exercise_date = datetime.date(2017, 3, 15)
strike = 102.5
@@ -52,44 +55,56 @@ class TestPutCallParity(unittest.TestCase):
payer.pv = 1.948 * 1e-2
self.assertAlmostEqual(payer.sigma, 0.4156000826)
+
class TestBreakeven(unittest.TestCase):
exercise_date = datetime.date(2017, 3, 15)
- hyindex = CreditIndex("hy", 27, "5yr",
- value_date=datetime.date(2016, 11, 16))
+ hyindex = CreditIndex("hy", 27, "5yr", value_date=datetime.date(2016, 11, 16))
hyindex.price = 103.75
hystrike = 102.5
- igindex = CreditIndex("ig", 27, "5yr",
- value_date=datetime.date(2016, 11, 18))
+ igindex = CreditIndex("ig", 27, "5yr", value_date=datetime.date(2016, 11, 18))
igindex.spread = 76.5
igstrike = 80
def test_hypayer(self):
payer = Swaption(self.hyindex, self.exercise_date, self.hystrike)
- payer.sigma = .4
+ payer.sigma = 0.4
payer.notional = 100_000_000
self.assertAlmostEqual(payer.breakeven, 100.67426187413359)
def test_hyreceiver(self):
- receiver = Swaption(self.hyindex, self.exercise_date,
- self.hystrike, "receiver")
- receiver.sigma = .4
+ receiver = Swaption(self.hyindex, self.exercise_date, self.hystrike, "receiver")
+ receiver.sigma = 0.4
receiver.notional = 100_000_000
self.assertAlmostEqual(receiver.breakeven, 103.95644740397454)
def test_igpayer(self):
payer = Swaption(self.igindex, self.exercise_date, self.igstrike)
- payer.sigma = .4
+ payer.sigma = 0.4
payer.notional = 1e7
self.assertAlmostEqual(payer.breakeven, 88.366980851176223)
def test_igreceiver(self):
- receiver = Swaption(self.igindex, self.exercise_date,
- self.igstrike, "receiver")
- receiver.sigma = .4
+ receiver = Swaption(self.igindex, self.exercise_date, self.igstrike, "receiver")
+ receiver.sigma = 0.4
receiver.notional = 1e7
self.assertAlmostEqual(receiver.breakeven, 73.71594264020226)
+
+class TestMoveForward(unittest.TestCase):
+ trade = BlackSwaption.from_tradeid(7)
+
+ def test_move_value_date(self):
+ trade = BlackSwaption.from_tradeid(7)
+ trade.value_date = datetime.date(2017, 6, 5)
+ trade.mark()
+ ig23 = CreditIndex("IG", 28, "5yr", value_date=datetime.date(2017, 6, 5))
+ trade2 = BlackSwaption(ig23, datetime.date(2017, 6, 21), 65.0)
+ trade2.notional = 150_000_000
+ trade2.mark()
+ self.assertAlmostEqual(trade.pv, trade2.pv)
+
+
if __name__ == "__main__":
unittest.main()