cfs = [5, 5, 105]
times = [1, 2, 3]
discount_rate = 0.03
present_value(discount_rate, cfs, times) # 105.65
duration(Macaulay(), discount_rate, cfs, times) # 2.86
duration(discount_rate, cfs, times) # 2.78
convexity(discount_rate, cfs, times) # 10.62
A collection of common functions/manipulations used in Actuarial Calculations.
duration
:- Calculate the
Macaulay
,Modified
, orDV01
durations for a set of cashflows - Calculate the
KeyRate(time)
(a.k.a.KeyRateZero
)duration orKeyRatePar(time)
duration
- Calculate the
convexity
for price sensitivity- Flexible interest rate models via the
FinanceModels.jl
package. internal_rate_of_return
orirr
to calculate the IRR given cashflows (including at timepoints like Excel'sXIRR
)breakeven
to calculate the breakeven time for a set of cashflowsaccum_offset
to calculate accumulations like survivorship from a mortality vectorspread
will calculate the spread needed between two yield curves to equate a set of cashflows
- Calculate risk measures for a given vector of risks:
CTE
for the Conditional Tail ExpectationVaR
for the percentile/Value at RiskWangTransform
for the Wang TransformationProportionalHazard
for proportional hazardsDualPower
for dual power measure
duration
:- Calculate the duration given an issue date and date (a.k.a. policy duration)
- functions which return a rate/yield will return a
FinanceCore.Rate
object. E.g.irr(cashflows)
will return aRate(0.05,Periodic(1))
instead of just a0.05
(float64
) to convey the compounding frequency. This is compatible across the JuliaActuary ecosystem and can be used anywhere you would otherwise use a simple floating point rate.
A couple of other notes:
rate(...)
will return the scalar rate value from aRate
struct:
julia> r = Rate(0.05,Periodic(1));
julia> rate(r)
0.05
- You can still pass a simple floating point rate to various methods. E.g. these two are the same (the default compounding convention is periodic once per period):
discount(0.05,cashflows)
r = Rate(0.05,Periodic(1));
discount(r,cashflows)
- convert between rates with:
r = Rate(0.05,Periodic(1));
convert(Periodic(2), r) # convert to compounded twice per timestep
convert(Continuous(2),r) # convert to compounded twice per timestep
For more on Rates, see FinanceCore.jl. FinanceModels.jl also provides a rich and flexible set of yield models to use.
Full documentation is available here.
See JuliaActuary.org for instructions on running this example.
Functions often use a mix of interest_rates, cashflows, and timepoints. When calling functions, the general order of the arguments is 1) interest rates, 2) cashflows, and 3) timepoints.