python进行财务分析「python与财务分析」 华为首次发债「华为即将破万亿」 某股份有限公司召开董事会会议,会议决定「第一创业证券是几类券商」 债券收益率上升是投资者目前面临的最大风险吗「债券收益加风险溢价法」 首笔海外人民币企业债 熊猫「外国金融机构进入中国」 金科地产武汉项目规划「金融信息赋能平台」 农发行成中国债券市场第三大发行主体了吗「国债发行市场由国债发行主体」 唐山今天预警了吗「唐山限跌令」 可转债持续下跌「可转债会一直涨吗」 财富不一定是金钱「金融的逻辑是什么」 贷款买房要注意「买房子为什么贷款是最好的」 2021年四川政府发行债券「四川发行地方债券」 20多年前的国库券还能兑换吗?「国库券还能兑换么」 国债期货上涨「国债期货下跌对股市是利好吗」 四川发行地方债券「中高等级债券」 利率下行对房贷的影响「房贷提前还款利息怎么算」 枪王之王古天乐为什么烧钱「枪王之王古天乐转账是干嘛的」 合兴转债股吧128071「合兴转债」 企业改制重组税收政策及实务指引解读「国家对企业合并重组的税收优惠政策」 资产配置类基金管理人「基金组合主理人」 基金换基金经理了该怎么办「基金更换基金经理是好还是不好」 关于破产重整的涉税问题探讨题目「企业破产程序中的涉税问题」 税务筹划思维下不良资产处置策略探析「思维可视化教学策略」 2020年电子式国债什么时候发行利率是多少「2020国债利率」 阿牛智投是真的假的「阿牛理财靠谱吗」 国债20万的利息是多少「国债利息比银行利息高吗」 抢滩不良资产市场「不良资产处置攻坚克难」 东兴证券 基金「比较稳定的基金」 如何理解债券「为什么买债券」 基金费率打折 背后藏着哪些秘密 「心里藏着秘密」 鹏华丰融什么时候开放申购「鹏华丰禄」 擅自发行股票,公司,企业债券罪「伪造身份证件罪量刑」 融创交房延期「泰禾 业主 自救」 2020年中国银行业形势「银行业展望2020中国经济 预计全年GDP增速6 左右」 工银瑞信稳健回报60天持有期短债「历年收益最好的一只纯债基金」 万达商管拟发行最高20亿公司债券数量「万达市值」 债券基金净值下跌「长期纯债基金收益率」 交通银行上海自贸区支行「渤海银行上海自贸区分行」 基金募集达不到多少失败「基金募集金额达不到」 这一年,欧债危机没有丝毫好转「中国巨债」 上市公司发行可转换公司债券法规有哪些要求「上市公司可以发行债券吗」 考会计初级看书好还是做题好「2018河南语文会考」 金融危机倒下的巨头「交易危机」 新手如何选择理财方式「新基金购买技巧」 中国发行欧元主权债券的意义「国际债券的信用评级具有重要意义」 怀宁县智慧城市(二期)建设EPC项目「安徽省智慧课堂」 最新一批储蓄国债即将发行「2021年已发行的储蓄国债」 可转换债券例题讲解「债券换股」 今年募集失败的基金「基金募集失败条件」 2019注册会计师 会计 持有至到期投资的股份「注册会计师通过率」
您的位置:首页 >新闻资讯 >

python进行财务分析「python与财务分析」

2022-12-26 13:00:58来源:Python金融量化

1. 货币时间价值

实际上numpy和scipy很强大,包含了计算各种财务指标的函数,可以直接调用,终值(fv)、现值(pv)、净现值(npv)、每期支付金额(pmt)、内部收益率(IRR)、修正内部收益率(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,120], 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=20000r=0.05n=5#调用前文定义的函数pv_f(c,r,n,when=1)pv1=pv_f(c,r,n,when=1)print("普通年金现值(年末):%.2f"% pv1)#如果是预付年金,则when=0pv2=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 npprint("numpy自带公式计算(年末):{:.2f} ".format(np.pv(r,5,-c),when=0))print("numpy自带公式计算(年初):{:.2f} ".format(np.pv(r,5,-c,when=1))) #结果一致使用计算公式计算(年末):86589.53使用计算公式计算(年初):90919.01numpy自带公式计算(年末):86589.53numpy自带公式计算(年初):90919.01如果要计算一系列现金流的终值呢?

#自定义终值函数def fv_f(c,r,n,when=1): import numpy as npc=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 npc=np.array(c)r=np.array(r)if fv==0: if when==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=5pv1=pv_f(c,r,n) #默认when=1可不写pv2=pv_fv(c,r,n) #默认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=2000000r=0.05/12 n=30*12pmt1=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=10736n0=n1=15*12r0=0.05/12r1=0.07/12pv0=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=3000000r=0.08/12n=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)/pmt1print("假设利率为5%情况:{0:.2f}元,每月支出增加比例:{1:.2f} %".format(pmt3,p*100))#如果考虑通货膨胀,实际也没多少收益率了自定义函数计算:8612.15元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比聪明的人还多得1毛2分6厘4。此时的实际利率是12.4864%。

【这里银行承诺的就是名义利率,而实际所得的是实际利率。(当然现实生活中的商业银行会把半年利率调低,而不是单纯的用一年的利率除以期数。)而后面两种情景的计息方式为 复利。俗称利滚利。不要以为利滚利就能滚上天,有一个条件限制住了它,叫名义利率。随着存取次数的不断增加,每一个期数内的利率也在逐渐减小。现在把计息次数扩大到∞,实际利率就变成了(1 12%/∞)^∞,而这玩意计算出来就是e^12%。这就是所谓的连续复利。】

4. 项目投资分析

金融财务分析里关于项目投资分析判断的方法有很多,比较常用的有净现值、回收期、内部收益率法等。

净现值法 (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项目第一年至五年分别收入10、30、50、40、10万,而项目B第一至五年分别收入30、40、40、20、10万,项目A和B哪个投资价值高?

#分析:如果光从金额看都是投资120万元,#回报都是140万元,#从回收期法来看,二者都是在第四年才收回成本#但由于货币的时间价值,下面从净现值的角度进行分析r=0.05C_A=[-120, 10, 30, 50, 40, 10]C_B=[-120, 30, 40, 40, 20, 10]npv_A=npv_f(r,C_A)npv_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比较消除了初始投资额不同和项目投资期限的差异,直观反映项目本身的报酬率;缺点是计算量大,可能存在多解或无解。净现值和内部收益率适用范围不同,净现值适用于互斥方案间的择优,而内部收益率用于独立方案间的择优。应用实例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)*100irr_D=IRR_f(D)*100print("内部收益率: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扩展1E=[-100,90,50,0,0,10]F=[-100,0,0,0,0,350]irr_E=IRR_f(E)*100irr_F=IRR_f(F)*100print("内部收益率: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扩展2G=[-100,90,50,0,0,10]H=[-150,0,50,50,50,150]irr_G=IRR_f(E)*100irr_H=IRR_f(F)*100print("内部收益率: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 inlinefrom matplotlib import pyplot as plt#解决中文乱码from pylab import mpl mpl.rcParams["font.sans-serif"] = ["SimHei"] pv=1000r=0.08n=10t=np.linspace(0,n,n)y1=np.ones(len(t))*pv y2=pv*(1 r*t)y3=pv*(1 r)**tplt.figure(figsize=(10,8))plt.title("单利和复利")plt.xlabel("年")plt.ylabel("终值")plt.xlim(0,11)plt.ylim(800,2200)plt.plot(t,y1,"b-")plt.plot(t,y2,"g--")plt.plot(t,y3,"r-")

郑重声明:本网站所有信息仅供参考,不做交易和服务的根据,如自行使用本网资料发生偏差,本站概不负责,亦不负任何法律责任。如有侵权行为,请第一时间联系我们修改或删除,多谢。