3.Python基础金融分析应用

2023-02-28  本文已影响0人  奶油裙子

一、如何用Python完成一项分析工作
将一项分析工作划分为若干个可操作的小部分
根据操作顺序进行分解
① 确定工作流程。
② 按工作流程将复杂工作划分成简单的部分。
③ 对各个部分进行程序设计,并一步步执行,并加以注释。
④ 组装成完整的程序。
例1 分析一个项目的IRR
首先确定IRR计算步骤,计算NPV和期初投入相等时的收益率即为内部收益率IRR。
② 先做出货币的时间价值的计算方法,即求现金流的现值。
③ 将计算NPV的方法打包成函数。
④ 设计循环无限逼近IRR。

例2 Python计算现金流的现值
假设投资者未来10年每年收到10000元的退休年金,期间贴现率为5%,请问这笔投资的现值为?
① 很明显,这里可以使用Python的循环求和方法,即计算每一期的现金流,将他们依次加起来。
② 首先需要写出每一期i(i从0开始)现金流的计算方法 cf_i = 10000/(1 + 5 / 100) ** (i+1)。
③ 在循环开始前定义一个储存总现值的变量total,每一期total = total + cf_i
④ 把各部分组成完整循环如下:

total=0
for i in range(10):
    cf_i=10000/(1+5/100)**(i+1)
    total=total+cf_i
print(total)

输出:
77217.34929184812
ps:
1.贴现率:未来的资产折算成现在的利率
举个例子:贴现率为10%,明年的100块在今年就相当于100/(1+10%)=90.909090...块钱,到了明年就是100/(1+10%)*(1+10%),也就是说,今年用90.909090...块可以买到的东西相当于明年100块可以买到的东西。
相关公式:pv=fv/(1+r)ⁿ
(pv(present value):现值 fv:期值 r:利率 n:期数)
拓展:封装成函数

def discount(n,cp,r):
    total=0
    for i in range(n):
        cf_i=cp/(1+r)**(i+1)
        total=total+cf_i
    print(total)
discount(10,10000,0.05)

输出:77217.34929184812

例3:用Python进行项目投资分析
净现值法分析投资项目
ps:净现值是未来现金流(带正负号表明其流入流出方向)贴现后的加总。
净现值=未来报酬的总现值-初始投资现值 NPV——净现值(Net Present Value)
假设贴现率为5%,有A、B两个项目,前期均需投入120万, A项目第一年至五年分别收入10、30、50、40、10万,而项目B第一至五年分别收入30、40、40、20、10万,项目A和B哪个投资价值高?
(1)判断哪个项目的投资价值更高,可以考虑分别计算2个项目的净现值。
(2) 首先考虑项目计算的输入为贴现率、现金流,输出为净现值。项目的现金流可以用列表表示,项目的总值可以用类似例4-1中的循环表示。定义一个函数,输入为贴现率和现金流,输出为净现值。

cashflow_A = [-120, 10, 30, 50, 40, 10]
total = 0
for i, cashflow in enumerate(cashflow_A):
    #(0,120),(1,10),(2,30)
    total = total + cashflow / (1 + 0.05)**i
print(total)

输出:0.6699344604846695
封装成函数:

def npv_f(rate, cashflows):
    total = 0
    for i, cashflow in enumerate(cashflows):
        total = total + cashflow / (1 + rate)**i
    return total
cashflow_A=[-120, 10, 30, 50, 40, 10]
cashflow_B=[-120,30,40, 40, 20, 10]
net_value_A= npv_f(0.05,cashflow_A)
net_value_B=npv_f(0.05,cashflow_B)
print(net_value_A,net_value_B)

输出:0.6699344604846695 3.695422811531828
例4 用Python进行项目投资分析
IRR方法分析投资项目
投资项目的净现值为0时,其贴现率的值即为内部回报率IRR。
Ø 假设贴现率为5%,有A、B两个项目,前期均需投入120万, A项目第一年至五年分别收入10、
30、50、40、10万,而项目B第一至五年分别收入30、40、40、20、10万,项目A和B哪个投
资价值高?
Ø 判断哪个项目的投资价值更高,可以考虑分别计算2个项目的IRR并进行比对。
Ø 这里可以考虑调用例2中已经写好的函数,简化IRR的计算。同时采用迭代的思路对投资项
目的IRR进行计算。

#导入模块 可以同时输出几个值
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity="all"
#设计IRR的计算方法
#方法1,二分法
def irr_f(cashflows, iterations=10000):
    rate_d = 0
    rate_u = 1
    rate = (rate_d + rate_u) / 2
    npv = npv_f(rate, cashflows)
    while abs(npv) > 0.0001:
        if npv > 0:
            rate_d = rate
            rate = (rate_d + rate_u) / 2
            npv = npv_f(rate, cashflows)
        else:
            rate_u = rate
            rate = (rate_d + rate_u) / 2
            npv = npv_f(rate, cashflows)
    return rate
irr_f(cashflow_A,iterations=10000)
irr_f(cashflow_B,iterations=10000)

输出:
0.051938533782958984
0.0628361701965332

下面这部分是老师讲义看到的,不理解

#方法2,迭代法
def IRR_f(cashflows, interations=10000):
    rate = 1.0
    investment = cashflow[0]
    for i in rang(1, interations + 1):
        rate = rate * (1 - npv_f(rate, cashflows) / investment)
    return rate

PS:IRR是Internal Rate of Return的简称,即为内部收益率 ,就是资金流入现值总额与资金流出现值总额相等、净现值等于零时的折现率。如果不使用电子计算机,内部收益率要用若干个折现率进行试算,直至找到净现值等于零或接近于零的那个折现率。
内部收益率,是一项投资渴望达到的报酬率,是能使投资项目净现值等于零时的折现率。它是一项投资渴望达到的报酬率,该指标越大越好。一般情况下,内部收益率大于等于基准收益率时,该项目是可行的。
IRR实质上就是一个折现率,比如以8%的利率借钱投资项目,而IRR为8%,那么这个项目刚好不赚不赔。
对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点的方法叫二分法。

问题:interations=1000不理解

上一篇 下一篇

猜你喜欢

热点阅读