Ejemplo n.º 1
0
def test_ForwardGenWithLongEndStub_BondAnnuity():

    settlement_date = Date(20, 6, 2018)
    face = 1000000

    maturity_date = Date(20, 6, 2028)
    coupon = 0.05
    freq_type = FrequencyTypes.SEMI_ANNUAL
    calendar_type = CalendarTypes.WEEKEND
    bus_day_adjust_type = BusDayAdjustTypes.FOLLOWING
    date_gen_rule_type = DateGenRuleTypes.FORWARD
    basis_type = DayCountTypes.ACT_360

    annuity = BondAnnuity(maturity_date, coupon, freq_type, calendar_type,
                          bus_day_adjust_type, date_gen_rule_type, basis_type,
                          face)

    annuity.calculate_payments(settlement_date)

    assert len(annuity._flow_amounts) == 10 * 2 + 1
    assert len(annuity._flow_dates) == 10 * 2 + 1

    assert annuity._flow_dates[0] == settlement_date
    assert annuity._flow_dates[-1] == maturity_date

    assert round(annuity._flow_amounts[0]) == 0.0
    assert round(annuity._flow_amounts[-1]) == 25417.0

    assert annuity.calc_accrued_interest(settlement_date) == 0.0
Ejemplo n.º 2
0
def test_Monthly_BondAnnuity():

    settlement_date = Date(20, 6, 2018)
    face = 1000000

    #Monthly Frequency
    maturity_date = Date(20, 6, 2028)
    coupon = 0.05
    freq_type = FrequencyTypes.MONTHLY
    calendar_type = CalendarTypes.WEEKEND
    bus_day_adjust_type = BusDayAdjustTypes.FOLLOWING
    date_gen_rule_type = DateGenRuleTypes.BACKWARD
    basis_type = DayCountTypes.ACT_360

    annuity = BondAnnuity(maturity_date, coupon, freq_type, calendar_type,
                          bus_day_adjust_type, date_gen_rule_type, basis_type,
                          face)

    annuity.calculate_payments(settlement_date)

    assert len(annuity._flow_amounts) == 10 * 12 + 1
    assert len(annuity._flow_dates) == 10 * 12 + 1

    assert annuity._flow_dates[0] == settlement_date
    assert annuity._flow_dates[-1] == maturity_date

    assert annuity._flow_amounts[0] == 0.0
    assert round(annuity._flow_amounts[-1]) == 4306.0

    assert annuity.calc_accrued_interest(settlement_date) == 0.0
Ejemplo n.º 3
0
def test_SemiAnnual_BondAnnuity():

    settlement_date = Date(20, 6, 2018)
    face = 1000000

    #Semi-Annual Frequency
    maturity_date = Date(20, 6, 2019)
    coupon = 0.05
    freq_type = FrequencyTypes.SEMI_ANNUAL
    calendar_type = CalendarTypes.WEEKEND
    bus_day_adjust_type = BusDayAdjustTypes.FOLLOWING
    date_gen_rule_type = DateGenRuleTypes.BACKWARD
    basis_type = DayCountTypes.ACT_360

    annuity = BondAnnuity(maturity_date, coupon, freq_type, calendar_type,
                          bus_day_adjust_type, date_gen_rule_type, basis_type,
                          face)

    annuity.calculate_payments(settlement_date)

    assert len(annuity._flow_amounts) == 2 * 1 + 1
    assert len(annuity._flow_dates) == 2 * 1 + 1

    assert annuity._flow_dates[0] == settlement_date
    assert annuity._flow_dates[-1] == maturity_date

    assert annuity._flow_amounts[0] == 0.0
    assert round(annuity._flow_amounts[-1]) == 25278.0

    assert annuity.calc_accrued_interest(settlement_date) == 0.0