金融入门课程之-年金方程

小卡 金融 2019-11-29 31 0 金融入门课程
[~~☛关于启用赞助会员☚~~]

让我们从汇总付款现值的函数开始。由于我们在不同的时间段内收到每笔付款,因此对每笔付款都会使用不同的折扣系数。我们将使用此功能执行的操作是接受一个元组列表,其中每个元组表示现金流量,其中元素1、2和3是变量P(本金),r(时间t的折扣率)和t(时间)。这将使我们可以在不同的时间段享受不同的折扣(在现实世界中,由于多种原因,由于长期投资,我们倾向于看到年利率更高)。我们的函数将被定义为遍历每个元组,找到当前值,然后将其添加到总当前值变量中

#We might also have cash flows that have a different r because the bank will pay more given longer term invests
#Such as CD products the penalize you if you take out money earlier but give a higher interest rate
#In this case we apply the different r for the different cash flows
#So a TVM equation where we give tuples of P, r, and t would look like
def TVM(cashflows):
    PV = 0
    for flow in cashflows:
        P = flow[0]
        r = flow[1]
        t = flow[2]
        PV_i = P/(1+r)**t
        PV+=PV_i
    return PV
PV = TVM([(100,.01,1),(200,.015,2),(100,.02,3)])
print(PV)

现在,让我们使用一个简单的循环来表示年金,当贴现率为5%时,年金每年为$ 100。

#Now, what is an annuity? It is a product where you get a payment for a set number of years
#So for example $100 in year 1, 2, 3, 4, 5
#Let's assume a constant r=5% and see how much this would be worth
PV = 0
for t in range(1,6):
    PV += 100/(1.05)**t
print(PV)

我们将为年金支付432.95美元,该年金在r = 5%的情况下在5年内每年提供100美元。由于现值是所有现金流量现值的总和,因此该估计在时间t = 5时的终值将易于计算。

#In terms of future value, if we invested each cash flow at r=5% as we get it, we would have...
print(PV*(1.05)**5)

返回我们的时间轴功能,您无需再次了解其内部工作原理

#Bringing back our timeline function
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [12,4]
def timelinePlot(periods,values):
    #Create our plot
    fig = plt.figure()
    ax = fig.add_subplot(111)

    #Set the limits of our plots (in terms of values, not dimensions)
    ax.set_xlim(0,10)
    ax.set_ylim(0,10)

    #Set the minimums that we will be plotting in (we give a 1 or 10% margin on each side)
    xmin = 1
    xmax = 9

    #Set the y of where our plot will be centered around, 5 is the middle
    y = 5

    #Set height for our ticks
    height = 1

    #Get the spacing between each tick
    delta = (xmax-xmin)/periods
    #Create the positions for each tick
    positions = [xmin+delta*x for x in list(range(periods+1))]

    #Plot the horizontal line
    plt.hlines(y, xmin, xmax)

    for t in range(periods+1):
        #Plot the tick
        plt.vlines(positions[t], y - .5, y + .5)
        #Plot the time period below
        plt.text(positions[t], y-1.2, t, horizontalalignment='center',fontsize=14)
    #Get rid of axes
    plt.axis('off')

    for value in values:
        #Plot a red dot on the year that our value is at
        plt.plot(positions[value[1]],y, 'ro', ms = 15, mfc = 'r')
        #Plot the values above, use rounding to keep it clean
        plt.text(positions[value[1]], y+1.2, "$"+str(round(value[0],1)), horizontalalignment='center',fontsize=18)


    plt.show()

在图形上,我们的年金可以表示为我们时间轴上每一个刻度的付款。如果是半年一次,那么每个刻度线都会有一个流量,每个刻度线之间会有一个流量,或者如果是两年一次,我们的现金流量会以刻度为单位交替变化。

payments = [(-PV,0)]
for x in range(1,6):
    payments.append((100,x))

timelinePlot(5,payments)

在现实世界中,必须汇总每笔现金流量才能获得年金的价值,这很烦人。有一个方便的公式使我们可以轻松地做到这一点。

PV=C[1(1+r)nr]" role="presentation" style="box-sizing: border-box; display: inline-block; line-height: 0; text-indent: 0px; text-align: center; text-transform: none; font-style: normal; font-weight: normal; font-size: 16.94px; letter-spacing: normal; overflow-wrap: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; margin: 0px; padding: 1px 0px; position: relative;">PV=C[1个-1个+[R-ñ[R]<
style="box-sizing: border-box;"/>PV = Present Value of Annuity" role="presentation" style="box-sizing: border-box; display: inline-block; line-height: 0; text-indent: 0px; text-align: center; text-transform: none; font-style: normal; font-weight: normal; font-size: 16.94px; letter-spacing: normal; overflow-wrap: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; margin: 0px; padding: 1px 0px; position: relative;">PV =年金现值C = Coupon Payment" role="presentation" style="box-sizing: border-box; display: inline-block; line-height: 0; text-indent: 0px; text-align: center; text-transform: none; font-style: normal; font-weight: normal; font-size: 16.94px; letter-spacing: normal; overflow-wrap: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; margin: 0px; padding: 1px 0px; position: relative;">C =优惠券付款r = Discount Rate" role="presentation" style="box-sizing: border-box; display: inline-block; line-height: 0; text-indent: 0px; text-align: center; text-transform: none; font-style: normal; font-weight: normal; font-size: 16.94px; letter-spacing: normal; overflow-wrap: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; margin: 0px; padding: 1px 0px; position: relative;">r =贴现率n = Number of Payments" role="presentation" style="box-sizing: border-box; display: inline-block; line-height: 0; text-indent: 0px; text-align: center; text-transform: none; font-style: normal; font-weight: normal; font-size: 16.94px; letter-spacing: normal; overflow-wrap: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; margin: 0px; padding: 1px 0px; position: relative;">n =付款次数

括号中的术语称为年金因子,您可以将其视为与我们收到的付款无关的术语,该术语表示折现率多少,以及折算率乘以多少来考虑付款次数。


版权免责声明

卡卡教学资源网所有资源全部来源于网络整理,本站目地只是为了提供给网友学习研究任何人以任何方式架设运营或出现任何法律问题都与本站无关,如同意观点请下载,如不同意请离开!卡卡教学资源网特此声明!

分享:

扫一扫在手机阅读、分享本文

本站资源所有内容免费,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号
×