Source code for Rates.ConstantDiscountRateCurveFactory

from datetime import date, timedelta

import numpy as np
from Calendars.CalendarTimeMeasure import CalendarTimeMeasure
from Rates.RawDiscountRateCurve import RawDiscountRateCurve

from Rates.RateCurveId import RateCurveId


[docs]class ConstantDiscountRateCurveFactory: """ Class to create a discount rate curve corresponding to a constant instantaneous interest rate. Parameters ---------- value_date : Date The quotation date corresponding to the discount rate curve. """ def __init__(self, value_date : date): self.__value_date = value_date
[docs] def build(self, periodicity : timedelta, end_date : date, interest_rate :float) -> RawDiscountRateCurve: """ Create a discount rate curve corresponding to a constant instantaneous interest rate. Parameters ---------- periodicity : timedelta The discretization of the discount rate curve in terms of duration. end_date : date The last maturity of the discount rate curve. interest_rate : float The constant instantaneous interest rate. Examples -------- >>> from Rates.ConstantDiscountRateCurveFactory import ConstantDiscountRateCurveFactory >>> from datetime import date >>> from datetime import timedelta >>> value_date = date(2017,5,7) >>> rate_curve_factory = ConstantDiscountRateCurveFactory(value_date) >>> periodicity = timedelta(days=90) >>> end_date = date(2019,5,7) >>> interest_rate = 0.01 >>> rate_curve = rate_curve_factory.build(periodicity, end_date, interest_rate) >>> print(rate_curve.discount_factors[2]) 0.992630032118 """ time_measure = CalendarTimeMeasure(self.__value_date) durations = [] discount_factors = [] current_date = self.__value_date + periodicity while(current_date < end_date): duration = time_measure.to_duration(current_date) durations.append(duration) discount_factor = np.exp(-interest_rate * duration) discount_factors.append(discount_factor) current_date = current_date + periodicity terminal_duration = time_measure.to_duration(end_date) durations.append(terminal_duration) discount_factor = np.exp(-interest_rate * terminal_duration) discount_factors.append(discount_factor) durations = np.array(durations) discount_factors = np.array(discount_factors) curve_id = RateCurveId("USD - LIBOR") return RawDiscountRateCurve(curve_id, durations, discount_factors)
if __name__ == "__main__": import doctest doctest.testmod()