Source code for finpricing.utils.cds_style

from enum import Enum
from finpricing.utils.date import TimeInterval
from finpricing.utils.frequency import FrequencyTypes
from finpricing.utils.bus_day_adj import BusDayAdjustTypes
from finpricing.utils.calendar import CalendarTypes
from finpricing.utils.day_count import DayCountTypes
from finpricing.utils.tools import ClassUtil


[docs] class CDSStubType(Enum): NO_STUB = "NO_STUB"
[docs] class CDSEffectiveDateStyle(Enum): PCD = "PCD"
[docs] class CDSTermStyle(Enum): IMM_CORPORATE = "IMM_CORPORATE"
[docs] class CDSAccruedStyle(Enum): SNAC = "SNAC" # use standard North American CDS accrual convention, T+1 CONVENTIONAL = "CONVENTIONAL" # use conventional CDS accrual convention, T
[docs] class CDSStyle(ClassUtil): def __new__(cls, *args, **kwargs): if len(args) == 1 and isinstance(args[0], str): return cls.from_name(args[0]) elif len(args) == 1 and isinstance(args[0], CDSStyleBase): return args[0] else: raise TypeError("Invalid CDSStyle initialization") def __init__(self) -> None: pass
[docs] @classmethod def from_name(cls, name): """Return a CDSStyle instance from a string of name""" # if the name is already a CDSStyle instance, return it if name == "CORP_NA": return CDSStyleCorpNA() else: raise ValueError(f"Unknown CDSStyle name: {name}")
[docs] @classmethod def CORP_NA(cls): return CDSStyleCorpNA()
[docs] class CDSStyleBase(ClassUtil): def __init__( self, name, day_count_type, frequency_type, bus_day_adj_type, cds_term_style, cds_effective_date_style, cds_stub_length, minimal_stub_period: int, eom_adj: bool, calendar_type, accrued_style ): self.save_attributes()
[docs] class CDSStyleCorpNA(CDSStyleBase): def __init__(self): super().__init__( name="CORP_NA", day_count_type=DayCountTypes.ACT_360, frequency_type=FrequencyTypes.QUARTERLY, bus_day_adj_type=BusDayAdjustTypes.FOLLOWING, cds_term_style=CDSTermStyle.IMM_CORPORATE, cds_effective_date_style=CDSEffectiveDateStyle.PCD, cds_stub_length=CDSStubType.NO_STUB, minimal_stub_period=TimeInterval(0, "d"), eom_adj=True, # calendar_type controls the holidays calendar_type=CalendarTypes.WEEKEND, # this is additional parameter I make for simplicity for CDSStyle accrued_style=CDSAccruedStyle.SNAC )