aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/analytics/tranche_basket.py3
-rw-r--r--python/analytics/tranche_functions.py3
m---------python/pyisda0
-rw-r--r--python/tests/test_dates.py36
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()