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)