aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/singlename_cds.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/singlename_cds.py')
-rw-r--r--python/analytics/singlename_cds.py51
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)