cds
financepy.products.credit.cds
Class
CDS
CDS(
step_in_dt: Date,
maturity_dt_or_tenor: Date | str,
running_cpn: float,
notional: float = 1000000,
long_protect: bool = True,
freq_type: FrequencyTypes = <FrequencyTypes.QUARTERLY: 4>,
accrual_dc_type: DayCountTypes = <DayCountTypes.ACT_360: 8>,
cal_type: CalendarTypes | list | tuple = <CalendarTypes.WEEKEND: 2>,
bd_type: BusDayAdjustTypes = <BusDayAdjustTypes.FOLLOWING: 2>,
dg_type: DateGenRuleTypes = <DateGenRuleTypes.BACKWARD: 2>,
) -> None
A class which manages a Credit Default Swap. It performs schedule
generation and the valuation and risk management of CDS.
Methods
value
value(
self,
value_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float,
pv01_method: int = 0,
prot_method: int = 0,
num_steps_per_year: int = 25,
)
Valuation of a CDS contract on a specific valuation date given
an issuer curve and a contract recovery rate.
spread_dv01
spread_dv01(
self,
value_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float,
pv01_method = 0,
prot_method = 0,
num_steps_per_year: int = 25,
)
Calculation of the change in the value of the CDS contract for a
one basis point change in the level of the CDS curve.
ir_dv01
ir_dv01(
self,
value_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float,
pv01_method: int = 0,
prot_method: int = 0,
num_steps_per_year: int = 25,
)
Calculation of the interest DV01 based on a simple bump of
the discount factors and reconstruction of the CDS curve.
recovery_dv01
recovery_dv01(
self,
value_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float,
pv01_method: int = 0,
prot_method: int = 0,
num_steps_per_year: int = 25,
)
PV change when contract and curve recovery both increase by 1%.
The market CDS calibration quotes and discount curve are held fixed.
Returns:
PV(curve recovery + 0.01, contract recovery + 0.01)
- PV(curve recovery, contract recovery)
upfront
upfront(
self,
value_dt: Date,
settle_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float,
pv01_method = 0,
prot_method = 0,
num_steps_per_year: int = 25,
)
Return clean percentage PV expressed on T+3 settlement date.
cash_settlement_amount
cash_settlement_amount(
self,
value_dt: Date,
settle_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float,
pv01_method = 0,
prot_method = 0,
num_steps_per_year: int = 25,
)
Return dirty amount paid on the T+3 settlement date.
clean_price
clean_price(
self,
value_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float,
pv01_method = 0,
prot_method = 0,
num_steps_per_year: int = 25,
)
Value of the CDS contract excluding accrued interest.
accrued_days
accrued_days(
self,
settle_dt: Date,
)
Number of days between the previous coupon and the currrent step
in date.
accrued_interest
accrued_interest(
self,
settle_dt: Date,
)
Calculate the amount of accrued interest that has accrued from the
previous cpn date (PCD) to the step_in_dt of the CDS contract.
prot_leg_pv
prot_leg_pv(
self,
value_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float = 0.4,
num_steps_per_year: int = 25,
prot_method = 0,
)
Calculates the protection leg PV of the CDS by calling into the
fast NUMBA code that has been defined above.
get_pcd
get_pcd(
self,
value_dt: Date,
)
Get the previous coupon date before the value date
rpv01
rpv01(
self,
value_dt: Date,
issuer_curve: CDSCurve,
pv01_method = 0,
)
The risky_pv01 is the present value of a risky one dollar paid on
the premium leg of a CDS contract.
premium_leg_pv
premium_leg_pv(
self,
value_dt: Date,
issuer_curve: CDSCurve,
pv01_method = 0,
)
Value of the premium leg of a CDS.
par_spread
par_spread(
self,
value_dt: Date,
issuer_curve: CDSCurve,
recovery_rate: float = 0.4,
num_steps_per_year: int = 25,
pv01_method = 0,
prot_method = 0,
)
Breakeven CDS cpn that would make the value of the CDS contract
equal to zero.
value_fast_approx
value_fast_approx(
self,
value_dt: Date,
flat_cont_interest_rate: float,
flat_cds_curve_spread,
curve_recovery: float = 0.4,
recovery_rate: float = 0.4,
bump_size: float = 0.0001,
recovery_bump_size: float = 0.01,
)
Fast approximate CDS valuation using flat hazard and discount curves.
The hazard rate is implied from the flat CDS spread via the credit
triangle ``h = spread / (1 - curve_recovery)`` and both survival
and discounting are treated as flat exponentials. The premium leg
ignores the actual coupon schedule; accrual-on-default is captured
only heuristically through the 365/360 clean-RPV01 adjustment. All
PVs are in currency units of the contract notional.
Args:
value_dt: Valuation date (a ``Date``). Scalar only.
flat_cont_interest_rate: Flat continuously compounded discount
rate. Scalar or array-like.
flat_cds_curve_spread: Flat CDS par spread (decimal, e.g. 0.01
for 100 bp). Must be non-negative. Scalar or array-like.
curve_recovery: Recovery rate used to imply the hazard rate
from the spread. Must lie in ``[0, 1)``. Scalar or
array-like.
contract_recovery_rate: Contractual recovery rate used on the
protection leg. Must lie in ``[0, 1]``. Scalar or
array-like.
bump_size: Absolute bump applied to the spread and to the
interest rate for the finite-difference sensitivities.
Scalar or array-like, strictly positive.
recovery_bump_size: Absolute bump applied to the contractual
recovery rate for the recovery sensitivity. Scalar or
array-like, strictly positive.
Returns:
A tuple ``(full_pv, clean_pv, spread_dv01, ir_dv01, recovery01)``:
full_pv: Clean PV plus accrued interest.
clean_pv: PV excluding accrued interest.
credit01: PV change for a 1 bp increase in the CDS spread.
ir01: PV change for a 1 bp increase in the interest rate.
recovery01: PV change for a 1 percentage-point increase in
the contractual recovery.
Elements are floats if every input was scalar, otherwise ndarrays
with the broadcast shape of the inputs. The sensitivities are
one-sided (upward) finite differences, rescaled to the stated
units whatever bump sizes are supplied. Recovery01 bumps the
recovery assumption everywhere it enters: the hazard rate is
re-implied from the unchanged quoted spread under the bumped
curve recovery, and the contractual loss uses the bumped
contract recovery. It is therefore small and vanishes for an
at-market contract.
Raises:
FinError: If any input is invalid, the inputs cannot be
broadcast together, or the contract has matured.
print_payments
print_payments(
self,
value_dt: Date,
issuer_curve: CDSCurve,
)
We only print payments after the current valuation date
Generated automatically from the FinancePy source code.
Do not edit this file manually.