diff options
Diffstat (limited to 'python/analytics/singlename_cds.py')
| -rw-r--r-- | python/analytics/singlename_cds.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/python/analytics/singlename_cds.py b/python/analytics/singlename_cds.py new file mode 100644 index 00000000..3c59f039 --- /dev/null +++ b/python/analytics/singlename_cds.py @@ -0,0 +1,51 @@ +from .credit_default_swap import CreditDefaultSwap +from .index_data import get_singlename_curve +from pyisda.date import previous_twentieth, roll_date +from .utils import tenor_to_float +from typing import Union +from yieldcurve import get_curve + +import datetime + + +class SingleNameCds(CreditDefaultSwap): + __slots__ = ("ticker", "seniority", "doc_clause", "tenor") + + def __init__( + self, + ticker: str, + seniority: str = "Senior", + doc_clause: str = "XR14", + tenor: str = "5yr", + *, + end_date: Union[datetime.date, None] = None, + recovery: float = 0.4, + fixed_rate: float = 100.0, + notional: float = 10e6, + currency: str = "USD", + value_date: datetime.date = datetime.date.today() + ): + + if end_date is None: + end_date = roll_date(value_date, tenor_to_float(tenor)) + + super().__init__( + previous_twentieth(value_date), end_date, recovery, fixed_rate, notional + ) + + self.ticker = ticker + self.seniority = seniority + self.doc_clause = doc_clause + self.tenor = tenor + self.currency = currency + self.value_date = value_date + + value_date = property(CreditDefaultSwap.value_date.__get__) + + @value_date.setter + def value_date(self, d: datetime.date): + self._yc = get_curve(d, self.currency) + self._sc = get_singlename_curve( + self.ticker, self.seniority, self.doc_clause, d, self._yc + ) + CreditDefaultSwap.value_date.__set__(self, d) |
