栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python金融数据分析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python金融数据分析

将一项分析工作划分为若干个可操作的小部分。

根据操作顺序进行分解

  1. 确定工作流程
  2. 按工作流程将复杂工作划分成简单的部分
  3. 对各个部分进行程序设计,并一步步执行,并加以注释
  4. 组装成完整的程序

例1 分析一个项目的IRR

  1. 首先确定IRR计算步骤,计算NPV和期初投入相等时的收益率即为内部收益率IRR
  2. 先做出货币的时间价值的计算方法,即求现金流的现值
  3. 将计算NPV的方法打包成函数
  4. 计算循环无限逼近IRR

例2 计算现金流的现值

假设投资者未来10年每年收到10000元的退休金,期间贴现率为5%,请问这笔投资的现值为?

很明显,这里可以使用Python的循环求和的方法,即计算每一期的现金流,将他们以次加起来;

首先需要写出每一期i(i从0开始)现金流的计算方法 cf_i = 10000/(1+5/100)**i;

在循环开始前定义一个储存总现值的变量total,每一期total=total+cf i;

把各部分组成完整循环如下:

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)

代码运行结果如下:

例3 净现值分析投资项目

净现值时未来现金流(带正负号表明其流入流出方向)贴现后的加总。

假设贴现率为5%,有A、B两个项目,前期均需投入120万,A项目第一年至第五年分别收入10、30、50、40、10万,而项目B第一至五年分别收入30、40、40、20、10万,项目A和项目B那个投资价值高?

判断哪个项目的投资价值更高,可以考虑分别计算2个项目的净现值。

首先考虑项目计算的输入为贴现率、现金流,输出为净现值。项目的现金流可以用列表表示,项目的总值可以用类似例1中的循环表示。定义一个函数,输入贴现率和现金流,输出为净现值。

def npv_function(rate,cashflows):
    total = 0
    for i, cashflow in enumerate(cashflows):
        #(0,-120),(1,10),(2,30)    
        
        total = total +cashflow /(1 + rate)**i
    return total

cashflows_A = [-120,10,30,50,40,10]
cashflows_B = [-120,30,40,40,20,10]
net_value_A = npv_f(0.05,cashflows_A)
net_value_B = npv_f(0.05,cashflows_B)

print(net_value_A,net_value_B)

代码运行结果如下:

 例4 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进行计算。

def irr_f(cashflows,iteration=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_u+ rate_d)/2
            npv = npv_f(rate,cashflows)
        else:
            rate_u = rate
            rate(rate_u + rate_d)/2
            npv = npv(rate,cashflows)
    return rate


irr_f(cashflows_A,iterations=10000)
irr_f(cashflows_B,iterations=10000)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656676.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号