1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
import unittest
from quantlib.time.api import (
Date,
Period,
Quarterly,
Schedule,
Rule,
WeekendsOnly,
Following,
Unadjusted,
)
from quantlib.settings import Settings
from serenitas.analytics.yieldcurve import YC
class TestYieldCurve(unittest.TestCase):
def assertListAlmostEqual(self, list1, list2, places=7):
self.assertEqual(len(list1), len(list2))
for a, b in zip(list1, list2):
self.assertAlmostEqual(a, b, places)
def test_bloomberg(self):
discounts = [
0.99848606,
0.99548212,
0.99167201,
0.98772518,
0.98629694,
0.98509013,
0.98389804,
0.98268094,
0.97993369,
0.97709955,
0.97430462,
0.97145583,
0.96827211,
0.9651054,
0.96194904,
0.95869946,
0.95499459,
0.95125679,
0.94753361,
0.94382501,
]
settings = Settings()
settings.evaluation_date = Date(23, 6, 2016)
curve = YC()
term_date = Date(20, 6, 2021)
cds_schedule = Schedule.from_rule(
settings.evaluation_date,
term_date,
Period(Quarterly),
WeekendsOnly(),
Following,
Unadjusted,
Rule.CDS2015,
)
curve_df = [curve.discount(d) for d in cds_schedule[1:-1]]
# last date is term_date+1
curve_df.append(curve.discount(term_date + 1))
self.assertListAlmostEqual(discounts, curve_df)
if __name__ == "__main__":
unittest.main()
|