Notation Guide

TmVal is intended to provide a more natural connection to actuarial notation than other time value of money packages from general areas of finance. By providing the main actuarial financial instruments as classes, TmVal makes it easier to represent and manipulate them in ways that more easily match actuarial theory.

This guide shows how common actuarial symbols can be replicated in TmVal. These are written in pseudocode and not meant to be executed directly, and serve as a guide as to what classes and functions correspond to which symbols.

Amount function: A_K(t)

Amount(gr, k).val(t)

Accumulation function: a(t)

Accumulation(gr).val(t)

Effective interest rate for the interval: i_{[t_1, t_2]} = \frac{a(t_2)-a(t_1)}{a(t_1)}

Accumulation(gr).effective_interval(t1, t2)

or, assuming proportionality:

Amount(gr, k).effective_interval(t1, t2)

Effective interest for the n-th time period: i_n = \frac{a(n) - a(n-1)}{a(n-1)}

Amount(gr, k).effective_rate(n)

Simple interest amount function: A_K(t) = K(1 + st)

Amount(gr=Rate(s), k).val(t)

Compound interest accumulation function: a(t) = (1 + i)^t

Accumulation(gr=Rate(i)).val(t)

or

Accumulation(gr=i).val(t)

Effective discount rate for the interval: d_{[t1, t2]} = \frac{a(t_2) - a(t_1)}{a(t_2)}

Accumulation(gr).discount_interval(t1, t2)

or, assuming proportionality:

Amount(gr, k).discount_interval(t1, t2)

Effective discount rate for the n-th time period: d_n = \frac{a(n) - a(n-1)}{a(n)}

Accumulation(gr).effective_discount(n)

Discount function: v(t) = \frac{1}{a(t)}

Accumulation(gr).discount_func(t)

Future principal: Sv(t_2)a(t_1) = S\frac{a(t_1)}{a(t_2)} = S\frac{v(t_2)}{v(t_1)}

Accumulation(gr).future_principal(fv=S, t1, t2)

Simple discount amount function: A_K(t) = \frac{K}{(1-dt)}

Amount(gr=Rate(sd), k).val(t)

Simple discount accumulation function: a(t) = \frac{1}{(1-dt)}

Accumulation(gr=Rate(sd), k).val(t)

Nominal interest rate of i^{(m)} convertible or compounded or payable m times per year

Rate(
    rate,
    pattern="Nominal Interest",
    freq=m)

Nominal discount rate d^{(m)} convertible or compounded or payable m times per year

Rate(
    rate,
    pattern="Nominal Discount",
    freq=m)

Force of interest: \delta = \lim_{m \to \infty} i^{(m)} = \ln(1+i)

Rate(delta)

Accumulation function under the force of interest: a(t) = e^{\delta t}

Accumulation(gr=Rate(delta))

Time \tau equation of value: \sum_k C_{t_k}\frac{a(\tau)}{a(t_k)} = B\frac{a(\tau)}{a(T)}

Payments(amounts, times, gr).eq_val(t)

Equated time: T=\frac{\ln\left(\frac{\sum_{k=1}^n C_{t_k} v^{t_k}}{C}\right)}{\ln v}

Payments(amounts, times, gr).equated_time(c=C)

Approximate dollar-weighted yield, k=1/2: j \approx \frac{2I}{A + B - I}

Payments(amounts, times, gr).dollar_weighted_yield(k_approx=True)

Annual time-weighted yield rate: i_{tw} = (1 + j_{tw})^{\frac{1}{T}} - 1 = \left[\prod_{k=1}^{r+1}(1 + j_k)\right]^{\frac{1}{T}} - 1

Payments(amounts, times, gr).time_weighted_yield()

Present value of basic annuity-immediate: \ax{\angln i}

Annuity(gr=i, n).pv()

Accumulated value of basic annuity-immediate: \sx{\angln i}

Annuity(gr=i, n).sv()

Loan payment, level: Q=\frac{L}{\ax{\angln i}}

get_loan_pmt(
    loan_amt=L,
    period,
    term,
    gr=Rate(i))

Savings payment to obtain accumulated balance: Q=\frac{B}{\sx{\angln i}}

get_savings_pmt(
    fv=B,
    period,
    term,
    gr=Rate(i)
)

Present value of basic annuity-due: \ax**{\angln i}

Annuity(
    gr=i,
    n=n,
    imd='due'
).pv()

Accumulated value of basic annuity-due: \sx**{\angln i}

Annuity(
    gr=i,
    n=n,
    imd='due'
).sv()

Present value of basic perpetuity-immediate: \ax{\angl{\infty} i}

Annuity(
    gr=i,
    term=np.Inf,
).pv()

Present value of basic perpetuity-due: \ax**{\angl{\infty} i}

Annuity(
    gr=i,
    term=np.Inf,
    imd='due'
).sv()

Present value of deferred annuity-immediate: \ax[w|n]{}

Annuity(
    gr,
    n=n,
    deferral=w
).pv()

Present value of deferred annuity-due: \ax**[w|n]{}

Annuity(
    gr,
    n=n,
    deferral=w,
    imd='due'
).pv()

Outstanding loan balance, retrospective method: \text{OLB}_k = La(k) - Q\sx{\angl{k}}

Loan(
    amt=L,
    pmt=Q,
    gr,
    period,
    term
).olb_r()

Outstanding loan balance, prospective method (adjusted final payment): \text{OLB}_k = Q\ax{\angl{n-k-1} i} + R(1 + i)^{-(n-k)}

Loan(
    amt=L,
    pmt=Q,
    gr,
    period,
    term
).olb_p(t, r)

Outstanding loan balance, prospective method (equal payments): \text{OLB}_k = Q\ax{\angl{n-k} i}

Loan(
    amt=L,
    pmt=Q,
    gr,
    period,
    term
).olb_p(t)

Present value of an annuity-immediate with geometrically increasing payments: P\left(\frac{1-\left(\frac{1+g}{1 + i}\right)^n}{i-g}\right)

Annuity(
    amount=P,
    n=n,
    gr=Rate(i),
    grog=g
).pv()

Present value of annuity-immediate with arithmetically increasing payments: (I_{P, Q} a){\angln i}

Annuity(
    amount=P,
    n=n,
    gr=Rate(i)
    aprog=Q
).pv()

Accumulated value of annuity-immediate with arithmetically increasing payments: (I_{P, Q} s){\angln i}

Annuity(
    amount=P,
    n=n,
    gr=Rate(i)
    aprog=Q
).sv()

Present value of annuity-immediate with arithmetically decreasing payments: (Da){\angln i}

 Annuity(
    amount=n,
    n=n,
    gr=Rate(i)
    aprog=-1
).pv()

Accumulated value of annuity-immediate with arithmetically decreasing payments: (Ds){\angln i}

 Annuity(
    amount=n,
    n=n,
    gr=Rate(i)
    aprog=-1
).sv()

Present value of annuity-due with arithmetically increasing payments: (I_{P, Q} \ax**{}){\angln i}

Annuity(
    amount=P,
    n=n,
    gr=Rate(i)
    aprog=Q,
    imd='due'
).pv()

Accumulated value of annuity-due with arithmetically increasing payments: (I_{P, Q} \sx**{}){\angln i}

Annuity(
    amount=P,
    n=n,
    gr=Rate(i)
    aprog=Q,
    imd='due'
).sv()

Present value of annuity-due with arithmetically decreasing payments: (D\ax**{}){\angln i}

 Annuity(
    amount=n,
    n=n,
    gr=Rate(i)
    aprog=-1,
    imd='due'
).pv()

Accumulated value of annuity-due with arithmetically decreasing payments: (D\sx**{}){\angln i}

 Annuity(
    amount=n,
    n=n,
    gr=Rate(i),
    aprog=-1,
    imd='due'
).sv()

Present value of perpetuity-immediate with arithmetically increasing payments: (I_{P, Q} a){\angl{\infty} i}

 Annuity(
    amount=P,
    term=np.Inf,
    gr=Rate(i),
    aprog=Q
).pv()

Present value of perpetuity-due with arithmetically increasing payments: (I_{P, Q} \ax**{}){\angl{\infty} i}

 Annuity(
    amount=P,
    term=np.Inf,
    gr=Rate(i)
    aprog=Q,
    imd='due'
).pv()

Present value of annuity-immediate with payments more frequent than each interest period: \ax{\angln i}[(m)]

Annuity(
    amount=1/m,
    term=n,
    gr=Rate(i),
    period=1/m
).pv()

Accumulated value of annuity-immediate with payments more frequent than each interest period: \sx{\angln i}[(m)]

Annuity(
    amount=1/m,
    term=n,
    gr=Rate(i),
    period=1/m
).sv()

Present value of annuity-due with payments more frequent than each interest period: \ax**{\angln i}[(m)]

Annuity(
    amount=1/m,
    term=n,
    gr=Rate(i),
    period=1/m,
    imd='due'
).pv()

Accumulated value of annuity-due with payments more frequent than each interest period: \sx**{\angln i}[(m)]

Annuity(
    amount=1/m,
    term=n,
    gr=Rate(i),
    period=1/m,
    imd='due'
).sv()

Present value of perpetuity-immediate with payments more frequent than each interest period: \ax{\angl{\infty} i}[(m)]

Annuity(
    amount=1/m,
    term=np.Inf,
    gr=Rate(i),
    period=1/m
).pv()

Present value of perpetuity-due with payments more frequent than each interest period: \sx**{\angl{\infty} i}[(m)]

Annuity(
    amount=1/m,
    term=np.Inf,
    gr=Rate(i),
    period=1/m,
    imd='due'
).pv()