def test_(self): for t in (0.012, 0.2, 0.5, 0.8, 1.0, 1.5, 2.0, 5.0): rate = 0.01 factor = continuous_compounding(rate, t) self.assertAlmostEqual(continuous_rate(factor, t), rate) factor = 0.5 rate = continuous_rate(factor, t) self.assertAlmostEqual(continuous_compounding(rate, t), factor) rate = 0.01 factor = simple_compounding(rate, t) self.assertAlmostEqual(simple_rate(factor, t), rate) factor = 0.5 rate = simple_rate(factor, t) self.assertAlmostEqual(simple_compounding(rate, t), factor) for p in (1, 2, 4, 12, 365): rate = 0.01 factor = periodic_compounding(rate, t, p) self.assertAlmostEqual(periodic_rate(factor, t, p), rate) factor = 0.5 rate = periodic_rate(factor, t, p) self.assertAlmostEqual(periodic_compounding(rate, t, p), factor)
def rate_from_disc_factor(start, end, dcc, df): """ calculates rate between given dates (start date excluded, end date included) from given discount factor :param BusinessDate start : start date of BusinessPeriod :param BusinessDate end : end date of BusinessPeriod :param dcc dcc : BusinessPeriod day count convention :param double df : discount factor :return double : rate """ return periodic_rate(df, dcc.get_year_fraction(start, end), 365)
def __init__(self, freq=1): super(Discrete, self).__init__() self.disc_factor_from_rate = \ lambda start, end, dcc, rate: periodic_compounding(rate, dcc.get_year_fraction(start, end), freq) self.rate_from_disc_factor = \ lambda start, end, dcc, df: periodic_rate(df, dcc.get_year_fraction(start, end), freq)