Interest rate transformations

cashflows.rate.equivalent_rate(nrate=None, erate=None, prate=None)[source]

Returns the equivalent interest rate over a time period.

Parameters:
  • nrate (TimeSeries) – Nominal interest rate per year.
  • nrate – Effective interest rate per year.
  • prate (TimeSeries) – Periodic interest rate.
Returns:

float value.

Only one of the interest rate must be supplied for the computation.

>>> equivalent_rate(prate=interest_rate([10]*5)) 
10.0...
cashflows.rate.iconv(nrate=None, erate=None, prate=None, pyr=1)[source]

The function iconv computes the conversion among periodic, nominal and effective interest rates. Only an interest rate (periodic, nominal or effective) must be specified and the other two are computed. The periodic rate is the rate used in each compounding period. The effective rate is the equivalent rate that produces the same interest earnings that a periodic rate when there is P compounding periods in a year. The nominal rate is defined as the annual rate computed as P times the periodic rate.

Parameters:
  • nrate (float, list, TimeSeries) – nominal interest rate per year.
  • erate (float, list, TimeSeries) – effective interest rate per year.
  • prate (float, list, TimeSeries) – periodic rate
  • pyr (int, list) – number of compounding periods per year
Returns:

  • (nrate, prate): when erate is specified.
  • (erate, prate): when nrate is specified.
  • (nrate, erate): when prate is specified.

Return type:

A tuple

Effective rate to nominal rate compounded monthly and monthly peridic rate.

>>> iconv(erate=10, pyr=12) 
(9.56..., 0.79...)
>>> iconv(prate=1, pyr=12) 
(12, 12.68...)
>>> iconv(nrate=10, pyr=12) 
(10.47..., 0.83...)

iconv accepts Python vectors.

>>> iconv(erate=10, pyr=[3, 6, 12]) 
([9.68..., 9.60..., 9.56...], [3.22..., 1.60..., 0.79...])
>>> iconv(prate=1, pyr=[3, 6, 12]) 
([3, 6, 12], [3.03..., 6.15..., 12.68...])
>>> iconv(nrate=10, pyr=[3, 6, 12]) 
([10.33..., 10.42..., 10.47...], [3.33..., 1.66..., 0.83...])
>>> iconv(erate=[10, 12, 14], pyr=12) 
([9.56..., 11.38..., 13.17...], [0.79..., 0.94..., 1.09...])
>>> iconv(prate=[1, 2, 3], pyr=12) 
([12, 24, 36], [12.68..., 26.82..., 42.57...])
>>> iconv(nrate=[10, 12, 14], pyr=12) 
([10.47..., 12.68..., 14.93...], [0.83..., 1.0, 1.16...])

When a rate and the number of compounding periods (pyr) are vectors, they must have the same length. Computations are executed using the first rate with the first compounding and so on.

>>> iconv(erate=[10, 12, 14], pyr=[3, 6, 12]) 
([9.68..., 11.44..., 13.17...], [3.22..., 1.90..., 1.09...])
>>> iconv(nrate=[10, 12, 14], pyr=[3, 6, 12]) 
([10.33..., 12.61..., 14.93...], [3.33..., 2.0, 1.16...])
>>> iconv(prate=[1, 2, 3], pyr=[3, 6, 12]) 
([3, 12, 36], [3.03..., 12.61..., 42.57...])

iconv accepts TimeSeries objects

>>> erate, prate = iconv(nrate = interest_rate(const_value=12, nper=12, pyr=2))
>>> prate 
Time Series:
Start = (0, 0)
End = (5, 1)
pyr = 2
Data = (0, 0)-(5, 1) [12] 6.00
>>> erate 
Time Series:
Start = (0, 0)
End = (5, 1)
pyr = 2
Data = (0, 0)-(5, 1) [12] 12.36
>>> erate, prate = iconv(nrate = interest_rate(const_value=12, nper=12, pyr=4))
>>> prate 
  Qtr0 Qtr1 Qtr2 Qtr3
0 3.00 3.00 3.00 3.00
1 3.00 3.00 3.00 3.00
2 3.00 3.00 3.00 3.00
>>> erate 
   Qtr0  Qtr1  Qtr2  Qtr3
0 12.55 12.55 12.55 12.55
1 12.55 12.55 12.55 12.55
2 12.55 12.55 12.55 12.55
>>> nrate, prate = iconv(erate = erate)
>>> nrate 
   Qtr0  Qtr1  Qtr2  Qtr3
0 12.00 12.00 12.00 12.00
1 12.00 12.00 12.00 12.00
2 12.00 12.00 12.00 12.00
>>> prate 
  Qtr0 Qtr1 Qtr2 Qtr3
0 3.00 3.00 3.00 3.00
1 3.00 3.00 3.00 3.00
2 3.00 3.00 3.00 3.00
>>> nrate, erate = iconv(prate = prate)
>>> nrate 
   Qtr0  Qtr1  Qtr2  Qtr3
0 12.00 12.00 12.00 12.00
1 12.00 12.00 12.00 12.00
2 12.00 12.00 12.00 12.00
>>> erate 
   Qtr0  Qtr1  Qtr2  Qtr3
0 12.55 12.55 12.55 12.55
1 12.55 12.55 12.55 12.55
2 12.55 12.55 12.55 12.55
cashflows.rate.to_compound_factor(nrate=None, erate=None, prate=None, base_date=0)[source]

Returns a list of compounding factors calculated as (1 + r)^(t - t0).

Parameters:
  • nrate (TimeSeries) – Nominal interest rate per year.
  • nrate – Effective interest rate per year.
  • prate (TimeSeries) – Periodic interest rate.
  • base_date (int, tuple) – basis time.
Returns:

Compound factor (list)

Examples

>>> nrate = interest_rate(const_value=4,nper=10, pyr=4)
>>> erate, prate = iconv(nrate=nrate)
>>> to_compound_factor(prate=prate, base_date=2) 
[0.980..., 0.990..., 1.0, 1.01, 1.0201, 1.030..., 1.040..., 1.051..., 1.061..., 1.072...]
>>> to_compound_factor(nrate=nrate, base_date=2) 
[0.980..., 0.990..., 1.0, 1.01, 1.0201, 1.030..., 1.040..., 1.051..., 1.061..., 1.072...]
>>> to_compound_factor(erate=erate, base_date=2) 
[0.980..., 0.990..., 1.0, 1.01, 1.0201, 1.030..., 1.040..., 1.051..., 1.061..., 1.072...]
cashflows.rate.to_discount_factor(nrate=None, erate=None, prate=None, base_date=0)[source]

Returns a list of discount factors calculated as 1 / (1 + r)^(t - t0).

Parameters:
  • nrate (TimeSeries) – Nominal interest rate per year.
  • nrate – Effective interest rate per year.
  • prate (TimeSeries) – Periodic interest rate.
  • base_date (int, tuple) – basis time.
Returns:

List of float values

Only one of the interest rates must be supplied for the computation.

>>> nrate = interest_rate(const_value=4,nper=10, pyr=4)
>>> erate, prate = iconv(nrate=nrate)
>>> to_discount_factor(nrate=nrate, base_date=2) 
[1.0201, 1.01, 1.0, 0.990..., 0.980..., 0.970..., 0.960..., 0.951..., 0.942..., 0.932...]
>>> to_discount_factor(erate=erate, base_date=2) 
[1.0201, 1.01, 1.0, 0.990..., 0.980..., 0.970..., 0.960..., 0.951..., 0.942..., 0.932...]
>>> to_discount_factor(prate=prate, base_date=2) 
[1.0201, 1.01, 1.0, 0.990..., 0.980..., 0.970..., 0.960..., 0.951..., 0.942..., 0.932...]