Discount Curve

DiscountCurve

class rivapy.marketdata.DiscountCurve(id: str, refdate: datetime | date, dates: List[date | datetime], df: List[float], interpolation: InterpolationType = InterpolationType.HAGAN_DF, extrapolation: ExtrapolationType = ExtrapolationType.NONE, daycounter: DayCounterType = DayCounterType.Act365Fixed)[source]

Bases: object

Discountcurve

Parameters:
  • id (str) – Identifier of the discount curve.

  • refdate (Union[datetime, date]) – Reference date of the discount curve.

  • dates (List[Union[datetime, date]]) – List of dates belonging to the list of discount factors. All dates must be distinct and equal or after the refdate, otherwise an exception will be thrown.

  • df (List[float]) – List of discount factors. Length of list of discount factors must equal to length of list of dates, otherwise an exception will be thrown.

  • interpolation (enums.InterpolationType, optional) – Defaults to InterpolationType.HAGAN_DF.

  • extrapolation (enums.ExtrapolationType, optional) – Defaults to ExtrapolationType.NONE which does not allow to compute a discount factor for a date past all given dates given to this constructor.

  • daycounter (enums.DayCounterType, optional) – Daycounter used within the interpolation formula to compute a discount factor between two dates from the dates-list above. Defaults to DayCounterType.Act365Fixed.

get_dates() Tuple[datetime][source]

Return list of dates of curve

Returns:

List of dates

Return type:

Tuple[datetime]

get_df() Tuple[float][source]

Return list of discount factors

Returns:

List of discount factors

Return type:

Tuple[float]

plot(days: int = 10, discount_factors: bool = False, **kwargs)[source]

Plots the discount curve using matplotlibs plot function. The timegrid includes the dates of the discount curve. Here either the discount factors or the zero rates (continuously compounded, ACT365 yearfraction) are plotted.

Parameters:
  • days (int, optional) – The number of days between two plotted rates/discount factors. Defaults to 10.

  • discount_factors (bool, optional) – If True, discount factors will be plotted, otherwise the rates. Defaults to False.

  • **kwargs – optional arguments that will be directly passed to the matplotlib plto function

value(refdate: date | datetime, d: date | datetime) float[source]

Return discount factor for a given date

Parameters:
  • refdate (Union[date, datetime]) – The reference date. If the reference date is in the future (compared to the curves reference date), the forward discount factor will be returned.

  • d (Union[date, datetime]) – The date for which the discount factor will be returned

Returns:

discount factor

Return type:

float

DiscountCurveParametrized

Parametrizations

class rivapy.marketdata.NelsonSiegel(beta0: float, beta1: float, beta2: float, tau: float)[source]

Bases: FactoryObject

Nelson-Siegel parametrization for rates and yields, see Nelson and Siegel[1].

This parametrization is mostly used to parametrize rate curves and can be used in conjunction with rivapy.marketdata.DiscountCurveParametrized. It is defined by

\[f(t) = \beta_0 + (\beta_1+\beta_2)\frac{1-e^{-t/\tau}}{t/\tau} -\beta_2e^{t/\tau}\]
Parameters:
  • beta0 (float) – This parameter is the asymptotic (for arbitrary large maturities) rate, see formula above.

  • beta1 (float) – beta0 + beta1 give the short term rate, see formula above.

  • beta2 (float) – This parameter controls the size of the hump, see formula above.

  • tau (float) – This parameter controls the location of the hump, see formula above.

Examples

>>> from rivapy.marketdata.curves import NelsonSiegel, DiscountCurveParametrized
>>> ns = NelsonSiegel(beta0=0.05, beta1 = 0.02, beta2=0.1, tau=1.0)
>>> dc = DiscountCurveParametrized('DC',  refdate = dt.datetime(2023,1,1), rate_parametrization=ns, daycounter = DayCounterType.Act365Fixed)
>>> dates = [dt.datetime(2023,1,1) + dt.timedelta(days=30*days) for days in range(120)]
>>> values = [dc.value(refdate = dt.datetime(2023,1,1),d=d) for d in dates]
>>> plt.plot(dates, values)
static compute(beta0: float, beta1: float, beta2: float, tau: float, T: float) float[source]

_summary_

Parameters:
  • beta0 (float) – longrun

  • beta1 (float) – beta0 + beta1 = shortrun

  • beta2 (float) – hump or through

  • tau (float) – locaton of hump

  • T (float) – _description_

Returns:

_description_

Return type:

float

class rivapy.marketdata.NelsonSiegelSvensson(beta0: float, beta1: float, beta2: float, beta3: float, tau: float, tau2: float)[source]

Bases: NelsonSiegel

Nelson-Siegel parametrization for rates and yields, see Nelson and Siegel[1].

This parametrization is mostly used to parametrize rate curves and can be used in conjunction with rivapy.marketdata.DiscountCurveParametrized. It is defined by

\[f(t) = \beta_0 + (\beta_1+\beta_2)\frac{1-e^{-t/\tau}}{t/\tau} -\beta_2e^{t/\tau}\]
Parameters:
  • beta0 (float) – This parameter is the asymptotic (for arbitrary large maturities) rate, see formula above.

  • beta1 (float) – beta0 + beta1 give the short term rate, see formula above.

  • beta2 (float) – This parameter controls the size of the hump, see formula above.

  • tau (float) – This parameter controls the location of the hump, see formula above.

Examples

>>> from rivapy.marketdata.curves import NelsonSiegel, DiscountCurveParametrized
>>> ns = NelsonSiegel(beta0=0.05, beta1 = 0.02, beta2=0.1, tau=1.0)
>>> dc = DiscountCurveParametrized('DC',  refdate = dt.datetime(2023,1,1), rate_parametrization=ns, daycounter = DayCounterType.Act365Fixed)
>>> dates = [dt.datetime(2023,1,1) + dt.timedelta(days=30*days) for days in range(120)]
>>> values = [dc.value(refdate = dt.datetime(2023,1,1),d=d) for d in dates]
>>> plt.plot(dates, values)
static compute(beta0, beta1, beta2, beta3, tau, tau2, T)[source]

_summary_

Parameters:
  • beta0 (float) – longrun

  • beta1 (float) – beta0 + beta1 = shortrun

  • beta2 (float) – hump or through

  • tau (float) – locaton of hump

  • T (float) – _description_

Returns:

_description_

Return type:

float

class rivapy.marketdata.ConstantRate(rate: float)[source]

Bases: FactoryObject

Continuously compounded flat rate object that can be used in conjunction with rivapy.marketdata.DiscountCurveParametrized.

Parameters:

rate (float) – The constant rate.

DiscountCurveParametrized

class rivapy.marketdata.DiscountCurveParametrized(obj_id: str, refdate: datetime | date, rate_parametrization, daycounter: DayCounterType | str = DayCounterType.Act365Fixed)[source]

Bases: FactoryObject

_summary_

Parameters:
  • obj_id (str) – _description_

  • refdate (Union[datetime, date]) – _description_

  • rate_parametrization (Callable[[float], float]) – _description_

  • daycounter (Union[DayCounterType, str], optional) – _description_. Defaults to DayCounterType.Act365Fixed.

value(refdate: date | datetime, d: date | datetime) float[source]

Return discount factor for a given date

Parameters:
  • refdate (Union[date, datetime]) – The reference date. If the reference date is in the future (compared to the curves reference date), the forward discount factor will be returned.

  • d (Union[date, datetime]) – The date for which the discount factor will be returned

Returns:

discount factor

Return type:

float

value_rate(refdate: date | datetime, d: date | datetime) float[source]

Return the continuous rate for a given date

Parameters:
  • refdate (Union[date, datetime]) – The reference date. If the reference date is in the future (compared to the curves reference date), the forward discount factor will be returned.

  • d (Union[date, datetime]) – The date for which the discount factor will be returned

Returns:

continuous rate

Return type:

float