Skip to content

kasperrisager/ActuaryUtilities.jl

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ActuaryUtilities

Stable Dev CI Codecov

Quickstart

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

Features

A collection of common functions/manipulations used in Actuarial Calculations.

Financial Maths

  • duration:
    • Calculate the Macaulay, Modified, or DV01 durations for a set of cashflows
  • convexity for price sensitivity
  • Flexible interest rate options via the Yields.jl package.
  • internal_rate_of_return or irr to calculate the IRR given cashflows (including at timepoints like Excel's XIRR)
  • breakeven to calculate the breakeven time for a set of cashflows
  • accum_offset to calculate accumulations like survivorship from a mortality vector

Options Pricing

  • eurocall and europut for Black-Scholes option prices

Risk Measures

  • Calculate risk measures for a given vector of risks:
    • CTE for the Conditiona Tail Expectation, or
    • VaR for the percentile/Value at Risk.

Insurance mechanics

  • duration:
    • Calculate the duration given an issue date and date (a.k.a. policy duration)

Typed Rates

  • functions which return a rate/yield will return a Yields.Rate object. E.g. irr(cashflows) will return a Rate(0.05,Periodic(1)) instead of just a 0.05 (float64) to convey the compounding frequency. This uses (and is fully compatible with) Yields.jl and can be used anywhere you would otherwise use a simple floating point rate.

A couple of other notes:

  • rate(...) will return the untyped rate from a Yields.Rate struct:
julia> r = Yields.Rate(0.05,Yields.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 = Yields.Rate(0.05,Yields.Periodic(1));
discount(r,cashflows)
  • convert between rates with:
using Yields

r = Yields.Rate(0.05,Yields.Periodic(1));

convert(Yields.Periodic(2),  r)   # convert to compounded twice per timestep
convert(Yields.Continuous(2),r)   # convert to compounded twice per timestep

For more, see the Yields.jl which provides a rich and flexible API for rates and curves to use.

Documentation

Full documentation is available here.

Examples

Interactive, basic cashflow analysis

See JuliaActuary.org for instructions on running this example.

Simple cashflow analysis with ActuaryUtilities.jl

Useful tips

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.

About

Common functions in actuarial and financial routines

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Julia 100.0%