diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/tranche_basket.py | 3 | ||||
| -rw-r--r-- | python/analytics/tranche_functions.py | 3 | ||||
| m--------- | python/pyisda | 0 | ||||
| -rw-r--r-- | python/tests/test_dates.py | 36 |
4 files changed, 36 insertions, 6 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py index 1255f639..1913c1d1 100644 --- a/python/analytics/tranche_basket.py +++ b/python/analytics/tranche_basket.py @@ -1,12 +1,13 @@ from .basket_index import BasketIndex from .db import _engine from .tranche_functions import ( - credit_schedule, adjust_attachments, cds_accrued, GHquad, BCloss_recov_dist, + credit_schedule, adjust_attachments, GHquad, BCloss_recov_dist, BCloss_recov_trunc, tranche_cl, tranche_pl) from .index_data import get_singlenames_curves, get_tranche_quotes from collections import namedtuple from copy import deepcopy from pandas.tseries.offsets import BDay +from pyisda.date import cds_accrued from scipy.optimize import brentq from scipy.interpolate import CubicSpline, PchipInterpolator from scipy.special import logit, expit diff --git a/python/analytics/tranche_functions.py b/python/analytics/tranche_functions.py index ec097c3c..21c7b328 100644 --- a/python/analytics/tranche_functions.py +++ b/python/analytics/tranche_functions.py @@ -334,6 +334,9 @@ def credit_schedule(tradedate, tenor, coupon, yc, enddate=None): return pydates[0], pd.DataFrame({"df": df, "coupons": coupons}, dates[1:]) def cds_accrued(tradedate, coupon): + """ computes accrued for a standard CDS + + TODO: fix for when trade_date + 1 = IMM date""" tradedate = pydate_to_qldate(tradedate) end = tradedate + Period('3M') diff --git a/python/pyisda b/python/pyisda -Subproject 80226519ecd6661ac9b9da08082205cceb8aa5b +Subproject 4afcece1ec84ffc3ec562e4213ae5e96862c457 diff --git a/python/tests/test_dates.py b/python/tests/test_dates.py index 843941db..d30809c9 100644 --- a/python/tests/test_dates.py +++ b/python/tests/test_dates.py @@ -5,13 +5,18 @@ import pandas as pd import sys sys.path.append('..') from analytics.utils import * -from pyisda.date import roll_date as roll_date_c +from analytics.tranche_functions import cds_accrued +from pyisda.date import roll_date as roll_date_c, cds_accrued as cds_accrued_c class TestStartDate(unittest.TestCase): def test_previous_twentieth(self): self.assertEqual(previous_twentieth(datetime.date(2016, 9, 20)), datetime.date(2016, 9, 20)) + self.assertEqual(previous_twentieth(datetime.date(2016, 6, 10)), + datetime.date(2016, 3, 21)) + self.assertEqual(previous_twentieth(datetime.date(2016, 6, 10), False), + datetime.date(2016, 3, 20)) self.assertEqual(previous_twentieth(datetime.date(2016, 10, 15)), datetime.date(2016, 9, 20)) self.assertEqual(previous_twentieth(datetime.date(2016, 12, 20)), @@ -21,13 +26,13 @@ class TestStartDate(unittest.TestCase): def test_previous_twentieth_timestamp(self): self.assertEqual(previous_twentieth(pd.Timestamp('2016-09-20')), - pd.Timestamp('2016-09-20')) + datetime.date(2016, 9, 20)) self.assertEqual(previous_twentieth(pd.Timestamp('2016-10-15')), - pd.Timestamp('2016-09-20')) + datetime.date(2016, 9, 20)) self.assertEqual(previous_twentieth(pd.Timestamp('2016-12-20')), - pd.Timestamp('2016-12-20')) + datetime.date(2016, 12, 20)) self.assertEqual(previous_twentieth(pd.Timestamp('2017-03-19')), - pd.Timestamp('2016-12-20')) + datetime.date(2016, 12, 20)) class TestEndDate(unittest.TestCase): def test_enddate(self): @@ -81,5 +86,26 @@ class TestEndDateC(unittest.TestCase): self.assertEqual(roll_date_c(datetime.date(2015, 12, 20), 5), datetime.date(2020, 12, 20)) +class TestCdsAccrued(unittest.TestCase): + def test_cdsaccrued(self): + self.assertAlmostEqual(cds_accrued(datetime.date(2016, 4, 1), 100), + cds_accrued_c(datetime.date(2016, 4, 1), 100)) + self.assertAlmostEqual(cds_accrued(datetime.date(2016, 3, 21), 100), + 0.2777777777777778) + self.assertAlmostEqual(cds_accrued(datetime.date(2016, 3, 18), 100), + 24.72222222222222) + #buggy + #self.assertAlmostEqual(cds_accrued(datetime.date(2016, 9, 19), 100), 0.) + + def test_cdsaccrued_c(self): + self.assertAlmostEqual(cds_accrued_c(datetime.date(2016, 4, 1), 100), + 3.3333333333333) + self.assertAlmostEqual(cds_accrued_c(datetime.date(2016, 3, 21), 100), + 0.27777777777777) + self.assertAlmostEqual(cds_accrued_c(datetime.date(2016, 3, 18), 100), + 24.72222222222) + self.assertAlmostEqual(cds_accrued_c(datetime.date(2016, 9, 19), 100), 0.) + + if __name__=="__main__": unittest.main() |
