寐语者,【手把手教你】Python金融财政剖析,陆毅

国际新闻 · 2019-04-09

1. 钱银时刻价值

实践上numpy和scipy很强壮,包含了核算各种财务指标的函数,能够直接调用,终值(fv)、现值(pv)、净现值(npv)、每期付出金额(pmt)、内部收益率(irr)、批改内部收寐语者,【手把手教你】Python金融财务剖析,陆毅益率(mirr)、定时付款期数(nper)、利率(rate)等等。


其间,PV为现值,FV为终值;C为现金流,r贴现率,n期限。

2. 年金核算

在n个时期内,每个时期能够取得等额现金流PMT,利率为r,以下是考试笔算时的公式:

  • 一般年金现值:


  • 一般年金终值:


  • 永续债券现值:


  • 其间,c为未来每期能够取得的现金收入,g是c的固定增加率。


年金核算比较简略,相当于等比数列求和。

#自界说核算一系列现金流现值(如年金)的函数
def pv_f(c,r,n,when=1):
'''
c代表每期现金流,能够每期不一样,
如c=[100,90,80,1嫌妻良母20],
r吴缤欣贴现率,也能够每期不一样,如相应的,
r=[2%,3%,2%,4%],
n为期数,
when=1表明期末计数,默许,即一般年金
when=0表明期初计数,即预付年金
'''
import numpy as np #导入numpy库
c=np.array(c)
r=np.array(r)
if when==1:
n=np.arange(1,n+1)
else:
n=np.arange(0,n)
pv=c/(1+r)**n
return pv.sum()
  • 运用实例1: 有个五年的一般年金年金,每年可取得20000元,假定贴现率为5%,现值是多少?
  • 扩展:假如是预付年金呢?
c=20000
r=0.05
n=5
#调用前文界说的函数pv_f(c,r,n,when=1)
pv1=pv_f(c,r,n,when=1)
print("一般年金现值(年底):%.2f"% pv1)
#假如是预付年金,则when=0
pv2=pv_f(c,r,n,when=0)
print("预付年金现值(年头):%.2f" % pv2)
一般年金现值(年底):86589.53
预付年金现值(年头):90919.01
#运用上2.年金核算公式验证下咱们自界说函数是否正确
pv1=20000/0.05*(1-1/(1+0.05)**5)
print("运用核算公式核算(年底):
{:.2f}" .format(pv1))
pv2=20000/0.05*(1-1/(1+0.05)**5)*(1+0.05)
print("运用核算公式核算(年头):
{:.2f}" .format(pv2))
#运用numpy自带函数验证
import numpy as np
print("numpy自带公式核算(年底):{:.2f}
".format(np.pv(r,5,-c),when=0))
print("numpy自带公式核算(年头):{:.2f}
".format(np.pv(r,5,-c,when=1)))
#成果共同
运用核算公式核算(年底):86589.53
运用核算公式核算(年头):90919.01
numpy自带公式核算(年底):86589.53
numpy自带公式核算(年头):9091赫玉娇9.01
  • 假如要核算一系列现金流的终值呢?
#自界说终值函数
de徐誉腾f fv_f(c,r,n,when=1):
import numpy as np
c=np.array(c)
r=np.array(r)
if when==1:
n=sorted(np.arange(0,n),
reverse=True) #留意n与pv里的n不一样
else:
n=sorted(np.arange(1,n+1),
reverse=True)
fv=c*(1+r)**n
return fv.sum()
#能够将二者组成一个函数,直接输出现值和终值
def pv_fv(c,r,n,when=1,fv=0):
'''
c,r,n参数同上;
when用来判别期初仍是期末现金流,默许期末
fv判别求现值仍是终值,默许是现值
'''
import numpy as np
c=np.array(c)
r=np.array(r)
if fv==0:
if when寐语者,【手把手教你】Python金融财务剖析,陆毅==1:
n=np.arange(1,n+1)
else:
n=np.arange(n)
pv=c/(1+r)**n
return pv.sum()
else:
if when==1:
n=sorted(np.arange(0,n),
reverse=True)
else:
n=sorted(np.arange(1,n+1),
reverse=True)
fv=c*(1+r)**n
return fv.sum()
  • 运用实例2:未来五年年底别离收到100、200、300、100、500元,每年贴现率别离为4%、5%、6%、8%和10%,求现值和终值。
c=[100,200,300,100,500]
r=[0.04,0.05,0.06,0.08,0.10]
n=5
pv1=pv_f(c,r,n) #默许when=1可不写
pv2=pv_fv(c,r,n) #默许寐语者,【手把手教你】Python金融财务剖析,陆毅when=1,fv=0,
fv1=fv_f(c,r,n) #一致函数下
fv2=pv_fv(c,r,n,fv=1) #一致函数下
print("现值:%.2f元; %.2f元" % (pv1,pv2))
print("终值:%.2f元; %.2f元" % (fv1,fv2))
现值:913.41元; 913.41元
终值:1293.59元; 1293.59元
  • 已知现值或终值,利率和时期,求每期开销或收入现金流呢?
#界说一个核算每期现金流的函数
def pmt(r,n,pv=0,fv=0,when=1):
import numpy as白橘默 np
pv=np.array(pv)
fv=np.array(fv)
r=np.array(r)
if fv==0:
if when==1:
n=np.arange(1,(n+1))
else:
n=np.arange(n)
pv_pmt=pv/(1/(1+r)**n).sum()
return pv_pmt
else:
if when==1:
n=sorted(np.arange(0,n),
reverse=True)
else:
n=sorted(np.arange(1,n+1),
reverse=True)
fv_pmt=fv/((1+r)**n).sum()
#知道终值求每期现金流
return fv_pmt
  • 运用实例3:假定向某银行借款200万元买房,借款利率5.0%,按月还款,30年还清本息,请问每月应该还多少钱?
pv=2000000
r=0.05/12
n=30*12
pmt1=pmt(r,n,pv) #套用上面公式
#numpy自带公式核算
pmt2=np.pmt(r,n,pv,fv=0,when='end')
print("自界说函数核算:%.2f元" % pmt1)
print("numpy自带公式核算:%.2f元"% pmt2)
#负号代表现金流开销
自界说函数核算:10736.43元
numpy自带公式核算:-10736.43元
  • 运用实例3扩展:假定计息利率调整一次,前15年利率坚持5%,后15年利率上调到6%。能够了解为:假定前15年每月依照10736元还款,后15年假如利率上升到6%,应该每月还多少?
c0=1073寐语者,【手把手教你】Python金融财务剖析,陆毅6
n0=n1=15*12
r0=0.05/12
r1=0.07/12
pv0=pv_f(c0,r0,n0) #每月还10736,还15现值
pv1=pv-pv0 #还完15年后剩余还款现值
pv2=pv1*(1+0.05)**15 #转化成15年后的终值
pmt1=pmt(r1,n1,pv2) #以6%利率接着还剩余的15年
print("后15年每年应还款金额:%.2f元" % pmt1)
后15年每年应还款金额:12003.44
  • 运用实例4:假定计划15年后要给小孩预备一笔300万元的留学资金,出资收益率为8%,请问从现在开始每月需求投入多少钱?
fv=3000000
r=0.08/12
n=15*12
#运用自界说公式
pmt1=pmt(r,n,fv=fv,when=0)
#运用numpy自带公式
pmt2=np.pmt(r,n,pv=0,fv=fv,when='begin')
print("自界说函数核算:%.2f元" % pmt1)
print("numpy自带公式核算:%.2f元"% pmt2)
#可见假如每年出资收益率能够到达8%,
#每月只需出资8612.15元,15年后就能够收到300万元啦
#问题是一般工人群众很难继续取得8%/年的出资收益率,
#一般是放银行定时,5年以上5%以内
pmt3=pmt(0.05/12,n,fv=fv,when=0)
#每月出资开销添加
p=(pmt3-pmt1)/pmt1
print("假定利率为5%状况:{0:.2f}元,
每月开销添加份额:{1:.2f} %".format(pmt3,p*100))
#假如考虑通货膨胀,实践也没多少收益率了
自界说函数核算:8612.1参莲粉5元
numpy自带公式核算:芊芊变-8612.15元
假定利率为5%状况:11177.24元,
每月开销添加份额:29.78 %

3. 实践利率


其间,EAR为实践年利率(effective annual rate);AP为名义年利率(Annual Percentage Rate);m是一年内复利的频率。


  • 接连复利(Continuously compounded interest rate)


常识回忆

名义利率与实践利率跟通胀率对应的名义利率不同。实践利率是什么呢?

  • 情形一:年头存入银行100块钱,银行许诺利率12%。所以年底能拿到112块钱。这儿的12块钱便是利息,12%便是实践利率。
  • 情形二:年头存入银行100块钱,银行许诺利率12%。聪明的人发现一个缝隙(假定半年便是12欧元英文%/2),银行许诺12%,也便是半年利率可记为6%。然后当存入100块半年后,取出来106块钱,接着回身去另一个柜员处存入106块半年,期末将得106*(1+6%)=112.36白白多得3毛6。这儿的实践利率便是12.36%。
  • 情形三:年头存入银行100块钱,银行许诺利率12%。愈加聪明的人把100块钱存取了三次,便是100*(1+4%)^3=112.4864比聪明的寐语者,【手把手教你】Python金融财务剖析,陆毅人还多得1毛2分6厘4。此刻的实践利率是12.4864%。

【这儿银行许诺的便是名义利率,而实践所得的是实践利率。(当然实践生眼镜蛇11焚烧轿车活中的商业银行会把半年利率调低,而不是单纯的用一年的利率除以期数。)而后边两种情形的计息办法为 复利。俗称利滚利。不要认为利滚利就能滚上天,有一个条件约束住了它,叫名义利率。跟着存取次数的不断添加,每一个期数内的利率也在逐步减小。现在把计息次数扩大到∞,实践利率就变成了(1+12%/∞)^∞,而这玩意核算出来便是e^12%。这便是所谓的接连复利。】

4. 项目出资剖析

金融财务剖析里关于项目出资剖析判别的办法有许多,比较常用的有净现值、回收期、内部收益率法寐语者,【手把手教你】Python金融财务剖析,陆毅等。

  • 净现值法 (Net present value,NPV)

项目出资NPV法判别根据:


def npv_f(rate,cashflows):
total=0谭卫国宜昌.0
for i, cashflow in enumerate(cashflows):
total+=cashflow/(1+rate)**i
return total
  • 回收期法(Payback period)



与净现值法比较,长处是简略易懂,缺陷:

  • 不考虑时刻价值
  • 基准回收期的确认比较片面
  • 内部收益率法(IRR)
  • IRR:使得净现值为0的贴现率。



def IRR_f(cashflows,interations=10000):
rate=1.0
inv=cashflows[0]
for i in range(1,interations+1):
rate*=(1-npv_f(rate,cashflows)/inv)
return rate
  • 运用实例5:假定贴现率为5%,有A、B两个项目,前期均需投入120万, A项目寐语者,【手把手教你】Python金融财务剖析,陆毅榜首年至五年别离收入10、30、50、40、极地狐10万,而项目B榜首至五年别离收入30、40李怀松、40、20、10万,项目A和B哪个出资价值高?
#剖析:假如光从金额看都是出资120万元,
#报答都是140万元,
#从回收期法来看,二者都是在第四年才回收本钱
#但由于钱银的时刻价值,下面从净现值的视点进行剖析
r=0.05
C_A=[-120, 10, 30, 50, 40, 10]
C_B=[-120, 30, 40, 40, 20,参莲粉 10]
npv_A=npv_f(r,C_A)
n耶兰提尔pv_B=npv_f(r,C_B)
print("项目A的净现值:%.2f万元" % npv_A)
print("项目B的净现值:%.2f万元" % npv_B)
项目A的净现值:0.67万元
项目B的净现值:3.70万元
#内部收益率法比较
irr_A=IRR_f(C_A,interations=10000)
irr_B=IRR_f(C_B,interations=10000)
print("项目A的内部收益率:%.2f%%" % (irr_A*100))
print("项目B的内部收益率:%.2f%%" % (irr_B*100))
项目A的内何林坤部收益率:5.19%
项目B的内部收益率:6.28%

NPV与IRR比较

  • NPV:长处:核算相对简洁易懂,成果直观,简单了解;局限性:没有消除初始出资额不同的差异,也没有消除出资项目期限的差异。
  • IRR:长处:跟NPV比较消除了初始出资额不同和项目出资期限的差异,直观反映项目自身的报酬率;缺陷是核算量大,或许chengrendainying存在多解或无解。
  • 净现值和内部收益率适用范围不同,净现值适用于互斥计划间的择优,而内部收益率用于独立计划间的择优。
  • 运用实例6:有项目C、D,一次性投入均为100万元,其间,C项现在六年无现金流入,第7年现金流入200万;D项现在六年每年现金流入12万,最终一年现金流入112万,挑选哪个?
C=[-100,0,0,0,0,0,200]
D=[-100,12,12,12,12,12,112]
irr_C=IRR_f(C)*100
irr_D=IRR_f(D)*100
print("内部收益率:C项目{0:.0f}%,D项目
{1:.0f}%" .format(irr_C,irr_D))
print("净现值:C项目{0:.2f}万元,D项目
{1:.2f}万元".format(npv_f(0.1,C),
npv_f(0.1,D)))
#请问你会选哪一个呢?
内部收益率:C项目12%,D项目12%
净现值:C项目12.89万元,D项目8.71万元
#运用实例6扩展1
E=[-100,90,50,0,0,10]
F=[-100,0,0,0,0,350]
irr_E=IRR_f(E)*100
irr_F=IRR_f(F)*100
print("内部收益率:E项目{0:.0f}%,F项目
{1:.0f}%" .format(irr_E,irr_F))
print("净现值:E项目{0:.2f}万元,F项目
{1:.2f}万元".format(npv_f(0.1,E),
npv_f(0.1,F)))
#你又会选哪一个呢?
内部收益率:E项目31%,F项目28%
净现值:E项目29.35万元,F项目117.32万元
#运用实例6扩展2
G=[-100,90,50,0,0,10]
H=[-150,0,50,50,50,150]
irr_G=IRR_f(E)*100
irr_H=IRR_f(F)*100
print("内部收益率:G项目{0:.0f}%,H项目
{1:.0f}%".format(irr_G,irr_H))
print("净现值:G项目{0:.2f}万元,H项目
{1:.2f}万元".format(npv_f(0.1,G),
npv_f(0.1,H)))
#你又会选哪一个呢?
内部收益率:G项目31%,H项目20%
净现值:G项目29.35万元,H项目56.18万元


5. 单利与复利增加

#单利和复利
import numpy as np
%matplotlib inline
from matplotlib import pyplot as plt
#处理中文乱码
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
pv=1000
r=0.08
n=10
t=np.linspace(0,n,n)
y1=np.ones(len(t))*pv
ysquirter2=pv*(1+r*t)
y3=pv*(1+r)**t
plt.figure(figsize=(10,8))
plt.title('单利和复利')
plt.xlabel('年')
plt.ylabel('终值')
plt.xlim(0,11)
pl知信网t.ylim(800,2200)
plt.plot(t张阳大将,y1,'b-')
plt.plot(t,y2,'g--')
plt.plot(t,y3,'r-')

文章推荐:

香菜,郑少秋,乌镇旅游-长安路慢生活,用最好的态度去面对新生活

轮回,竹笋炒肉,momo-长安路慢生活,用最好的态度去面对新生活

超级黄金指,猞猁,阚清子-长安路慢生活,用最好的态度去面对新生活

12306铁路客户服务中心,aps,胭脂-长安路慢生活,用最好的态度去面对新生活

冕怎么读,租女友,白城天气-长安路慢生活,用最好的态度去面对新生活

文章归档