qfinbox.tvm.annuities

Annuity calculations.

Functions

annuity_due_fv(payment, rate, periods)

Calculate future value of annuity due.

annuity_due_pv(payment, rate, periods)

Calculate present value of annuity due.

annuity_fv(payment, rate, periods[, due])

Calculate future value of annuity (ordinary or due).

annuity_pv(payment, rate, periods[, due])

Calculate present value of annuity (ordinary or due).

growing_annuity_pv(payment, rate, ...)

Calculate present value of a growing annuity.

ordinary_annuity_fv(payment, rate, periods)

Calculate future value of ordinary annuity.

ordinary_annuity_pv(payment, rate, periods)

Calculate present value of ordinary annuity.

perpetuity_value(payment, rate)

Calculate present value of a perpetuity.

validate_positive(value[, name])

Validate that a value is positive.

qfinbox.tvm.annuities.ordinary_annuity_pv(payment: float, rate: float, periods: int) float[source]

Calculate present value of ordinary annuity.

Parameters:
  • payment (float) – Periodic payment amount.

  • rate (float) – Interest rate per period (as decimal).

  • periods (int) – Number of periods.

Returns:

Present value of ordinary annuity.

Return type:

float

Examples

>>> ordinary_annuity_pv(1000, 0.05, 10)
7721.73
qfinbox.tvm.annuities.ordinary_annuity_fv(payment: float, rate: float, periods: int) float[source]

Calculate future value of ordinary annuity.

Parameters:
  • payment (float) – Periodic payment amount.

  • rate (float) – Interest rate per period (as decimal).

  • periods (int) – Number of periods.

Returns:

Future value of ordinary annuity.

Return type:

float

Examples

>>> ordinary_annuity_fv(1000, 0.05, 10)
12577.89
qfinbox.tvm.annuities.annuity_due_pv(payment: float, rate: float, periods: int) float[source]

Calculate present value of annuity due.

Parameters:
  • payment (float) – Periodic payment amount.

  • rate (float) – Interest rate per period (as decimal).

  • periods (int) – Number of periods.

Returns:

Present value of annuity due.

Return type:

float

Examples

>>> annuity_due_pv(1000, 0.05, 10)
8107.82
qfinbox.tvm.annuities.annuity_due_fv(payment: float, rate: float, periods: int) float[source]

Calculate future value of annuity due.

Parameters:
  • payment (float) – Periodic payment amount.

  • rate (float) – Interest rate per period (as decimal).

  • periods (int) – Number of periods.

Returns:

Future value of annuity due.

Return type:

float

Examples

>>> annuity_due_fv(1000, 0.05, 10)
13206.79
qfinbox.tvm.annuities.annuity_pv(payment: float, rate: float, periods: int, due: bool = False) float[source]

Calculate present value of annuity (ordinary or due).

Parameters:
  • payment (float) – Periodic payment amount.

  • rate (float) – Interest rate per period (as decimal).

  • periods (int) – Number of periods.

  • due (bool, default False) – If True, calculate annuity due. If False, ordinary annuity.

Returns:

Present value of annuity.

Return type:

float

qfinbox.tvm.annuities.annuity_fv(payment: float, rate: float, periods: int, due: bool = False) float[source]

Calculate future value of annuity (ordinary or due).

Parameters:
  • payment (float) – Periodic payment amount.

  • rate (float) – Interest rate per period (as decimal).

  • periods (int) – Number of periods.

  • due (bool, default False) – If True, calculate annuity due. If False, ordinary annuity.

Returns:

Future value of annuity.

Return type:

float

qfinbox.tvm.annuities.perpetuity_value(payment: float, rate: float) float[source]

Calculate present value of a perpetuity.

A perpetuity is a stream of equal payments that continues forever.

Parameters:
  • payment (float) – Periodic payment amount.

  • rate (float) – Interest rate per period (as decimal).

Returns:

Present value of perpetuity.

Return type:

float

Raises:

ValidationError – If any parameter is invalid.

Examples

>>> perpetuity_value(50000, 0.04)
1250000.0

Notes

The formula for a perpetuity is simply: PV = Payment / Rate

qfinbox.tvm.annuities.growing_annuity_pv(payment: float, rate: float, growth_rate: float, periods: int) float[source]

Calculate present value of a growing annuity.

A growing annuity has payments that grow at a constant rate each period.

Parameters:
  • payment (float) – Initial payment amount.

  • rate (float) – Interest rate per period (as decimal).

  • growth_rate (float) – Growth rate of payments per period (as decimal).

  • periods (int) – Number of periods.

Returns:

Present value of growing annuity.

Return type:

float

Raises:

ValidationError – If any parameter is invalid.

Examples

>>> growing_annuity_pv(2, 0.09, 0.05, 20)
24.36

Notes

If rate equals growth_rate, the formula becomes: PV = PMT * n / (1 + r) Otherwise: PV = PMT * [(1 - ((1 + g) / (1 + r))^n) / (r - g)]