用Python编写一个金融计算器

1.编写不需要保存的Python函数

编写简单的计算未来现金的现值的数学公式

def pv_f(fv,r,n):return fv/(1+r)**n
print(pv_f(100,0.1,1))
结果
90.9090909090909

2.缩进格式在Python编程中至关重要

def pv_f(fv,r,n):pv= fv/(1+r)**nreturn pv
print(pv_f(r=0.1,fv=100,n=1))
结果
90.9090909090909

3.在Python编辑器里定义函数

def pv_f(fv,r,n):pv= fv/(1+r)**nreturn pv
print(pv_f(r=0.1,fv=100,n=1))
print(dir())
结果
90.9090909090909
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'pv_f']

4.利用import()在Python 编辑器里激活自己编写的函数

在上一章,我们学习了如何使用import math命令来激活math模块,从而可以调用该模块包含的函数。也可以用impor命令来调用自己编写的函数

做之前要先保存,我是保存为python33.py文件

def pv_f(fv,r,n):pv= fv/(1+r)**nreturn pv
print(pv_f(r=0.1,fv=100,n=1))
print(dir())import python33
print(dir())
print(python33.pv_f(100,0.1,1))
结果
90.9090909090909
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'pv_f']
90.9090909090909
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'pv_f']
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'pv_f', 'python33']
90.9090909090909
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'pv_f', 'python33']
90.9090909090909

5.调用pv_f函数的两种方法

方法一

def pv_f(fv,r,n):pv= fv/(1+r)**nreturn pvfrom python33 import pv_f
print(pv_f(100,0.1,1))
结果
90.9090909090909
90.9090909090909

方法二

def pv_f(fv,r,n):pv= fv/(1+r)**nreturn pvimport python33
print(pv_f(100,0.1,2))
结果
82.64462809917354
82.64462809917354

后面用del()可以删除指定的函数或变量

def pv_f(fv,r,n):pv= fv/(1+r)**nreturn pvimport python33
print(pv_f(100,0.1,2))
del pv_f
print(dir())
结果
82.64462809917354
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'python33']
82.64462809917354
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'python33']

6.生成自制的模块

例题1-2,计算永久年金的现值,永久年金在每一期的期末支付等额的一笔现金,其现值如下:

                 ***PV=C/R***
def pv_perpetuity(c,r):return c/r
print(pv_perpetuity(100,0.1))
结果
1000.0

保存后在另一个py文件中调用该命令

from python33 import *
print(pv_perpetuity(100,0.1))
结果
1000.0
1000.0

7.两种注释方法

方法一:

fv= 100 # this is comment
print(fv)
结果
100

方法二:

#present value of perpetuity
def pv_perpetuity (c,r):# c is cash flow# r is discount ratereturn c/r
print(pv_perpetuity (100,0.1))
结果
1000.0

8.条件函数if()

def pv_growing_perpetuity(c,r,g):if(r<g):print("r<g!!!")else:return(c/(r-g))
print(pv_growing_perpetuity(10,0.1,0.08))
pv_growing_perpetuity(10,0.1,0.12)
结果
499.9999999999999
r<g!!!

9.计算年金&李利率换算

例题1-3,在未来7年每年年底获得100美元。假设第一次现金支付发生在第一期的结尾,估计年金的现值和未来值的公式如下:


(图片来源于百度图片)

例题1-4,假设A银行提供按半年负利率为5%的贷款,B银行提供按季复利年利率为5.1%的贷款。为了获得较低的利率,我们应该从哪家银行借钱。

给定年利率(annual percentage rate, APR)
有效年利率(effective annual rate, EAR)

**EAR=(1+APR/m)m-1

m 是复利频率

pv1=(1+0.05/2)**2-1
print(pv1)
pv2=(1+0.051/4)**4-1
print(pv2)
结果
0.05062499999999992
0.051983692114066615

可以看出A银行的利率更低,可以从A银行借钱

例题1-5,打算借30万美元为期30年的贷款买房子。如果银行贷款为5%的年利率每半年复利,每月支付是多少?

已知pv=300000,n=30*12

r=(1+0.05/2)**(2/12)-1
print(r)
pv=300000
n=30*12
pmt=pv*r/(1-1/(1+r)**n)
print(pmt)
结果
0.0041239154651442345
1601.0720364262665

10.列表

列表是另一种常用的python数据类型。列表类型的变量可以包括不同类型的数据。如字符串、整数、浮点数,甚至一个列表。元祖用圆括号来定义,而列表用方括号来定义。

record=['Vickie',22,'Student',1]
print(record)
结果
['Vickie', 22, 'Student', 1]

与元祖类似,第一个数据项的下标为0。使用record[1:]列出从下标1开始的所有数据, record[2:]列出从下标2开始的所有数据

record=['Vickie',22,'Student',1]
print(record)
print(record[0])
print(record[1:])
结果
['Vickie', 22, 'Student', 1]
Vickie
[22, 'Student', 1]

与元祖不同的是,元祖的内容不可更改,而列表的内容可以改变

record=['Vickie',22,'Student',1]
print(record)
print(record[0])
print(record[1:])
record[0]='Candy'
print(record[0])
结果
['Vickie', 22, 'Student', 1]
Vickie
[22, 'Student', 1]
Candy

11.净现值和净现值法则

净现值NPV被定义为所有的收益和成本的现值之间的差额
NPV=FV(benefits)-PV(costs)

例题1-6,假如我们考虑投资一个起始资金1亿美元为期5年的项目。在未来5年每年年底的现金流分别是2000万美元、4000万美元、5000万美元、2000万美元和1000万美元。如果这种类型的投资的折现率是每年5%,我们是否应该投资这一项目

def npv_f(rate,cashflows):total=0.0for i, cashflow in enumerate(cashflows):total+=cashflow/(1+rate)**ireturn totalr=0.05
cashflows=[-100,20,40,50,20,10]
print(npv_f(r,cashflows))
结果
22.80998927303707

这里for循坏有两个中间变量i(0~5)和cashflow(-100,20,40,50,20,10)
注意cashflow和cashflows是两个不同的变量,Python的命令x+=v等于x=x+v

结果NPV大于0,这个项目是可做的。

12.投资回收期和投资回收期法则

投资回收期指我们需要多少年才能收回初始的投资资金。在上面的例子中,需要超过2年但不到3年的时间来收回100亿美元的初始投资,因为两年收回60亿美元,3年收回110亿美元,如果收入在一年内均匀分布,该项目的投资回收期为2.8年。

print(40/50+2)
结果
2.8

投资回收期法是指,如果项目的预计投资回收期小于临界值,我们接受这个项目,否则,就拒绝他。

与净现值法比较,投资回收期则有许多的缺点,比如它忽略了现金的时间价值、临界值的选取比较随意等,它的优点是非常简单。

13.内部收益率和内部收益率法则

内部收益率IRR是使得净现值为0的折现率。IRR法则是指,如果项目的内部收益率比资本成本大,就接受这个项目,否则拒绝它。

def npv_f(rate,cashflows):total=0.0for i, cashflow in enumerate(cashflows):total+=cashflow/(1+rate)**ireturn totaldef IRR_f(cashflows,interations=100):rate=1.0investment=cashflows[0]for i in range(1,interations+1):rate*=(1-npv_f(rate,cashflows)/investment)return ratecashflows=[-100,20,40,50,20,10]
x=IRR_f(cashflows)
print(x)
结果
0.1360125939440155

range(1,100+1)语句给出1~101的区间,变量i取值为1~101,换句话说,第5行代码将执行101次,第5行基于假设,R和NPV是负相关的,换句话说,增加折现率R导致较小的NPV。

由此可见,如果资本成本是5%,我们会接受这个项目。

Pycharm 金融Python实战二:用Python编写一个金融计算器——编写函数 调用命令 实例年金现值 利率换算 净现值法 投资回报期 内部收益率及其法则(带程序和结果)相关推荐

  1. 『矩阵论笔记』线性判别分析(LDA)最全解读+python实战二分类代码+补充:矩阵求导可以参考

    线性判别分析(LDA)最全解读+python实战二分类代码! 文章目录 一.主要思想! 二.具体处理流程! 三.补充二中的公式的证明! 四.目标函数的求解过程! 4.1.优化问题的转化 4.2.拉格朗 ...

  2. Python实战|如何使用Python调用大华SDK实现视频监控

    Python实战|如何使用Python调用大华SDK实现视频监控 在当今社会,安全问题越来越受到人们的关注.而视频监控作为一种非常有效的手段,越来越得到人们的重视和使用.大华科技是国内著名的视频监控设 ...

  3. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  4. 编写一个C程序,实现以下功能:编写一个常规的函数和一个递归函数,两个函数均能将输入的一个字符串以按反序形式的字符串作为返回值。在main函数中输入一行字符串,分别调用两个函数,输出反序后的字符串。

    题目要求: 编写一个C程序,实现以下功能:编写一个常规的函数和一个递归函数,两个函数均能将输入的一个字符串以按反序形式的字符串作为返回值.在main函数中输入一行字符串,分别调用两个函数,输出反序后的 ...

  5. 【Python 实战基础】Python 中 PyQt6 的 QPen 介绍

    目录 一.实战场景 二.主要知识点 文件读写 基础语法 PyQt6 QPen 三.菜鸟实战 一.实战场景 实战场景:Python 中 PyQt6 的 QPen 介绍 二.主要知识点 文件读写 基础语法 ...

  6. python实战项目示例 :揭秘微信朋友圈(调用wxpy库)

    通过python,连接到微信账号,收集好友性别.城市.个性签名等公开信息,使用 Python 进行数据统计与分析,得到你专属的朋友圈的分析报告! github地主:https://github.com ...

  7. python实战系列之python变量

    变量与数据类型 变量 编程语言中为了能够更好的处理数据,都需要使用一些变量.Python 语言的变量可以是各种不同的数据类型,使用变量的时候不需要声明直接使用就可以. 变量命名规则 Python 3 ...

  8. Java黑皮书课后题第7章:*7.1(指定等级)编写一个程序读入学生成绩,得到最高分best,然后根据下面的规则给出等级值。程序提示用户输入学生总数,然后提示用户输入所有的分数,最后显示等级给出结论

    7.1(指定等级)编写一个程序读入学生成绩,得到最高分best,然后根据下面的规则给出等级值 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 *7.1(指定等级)编写一个程序读入学生成 ...

  9. 【Python实战】用Python制作动态微信二维码qrcode

    Python完整代码 # https://github.com/sylnsfar/qrcode#common-qr-code from MyQR import myqr import osversio ...

最新文章

  1. 南京、苏州、杭州、上海你更喜欢哪座城市?
  2. 这老哥把GPU当暖气用,省钱了
  3. 深入理解lombok
  4. Kotlin实战指南二十:flow
  5. 单调队列优化的背包问题
  6. css3实现的the Sexy Buttons
  7. 理解 JS 回调函数中的 this
  8. python的httplib、urllib和urllib2的区别及应用
  9. php对象在内存中的分配
  10. 基于QT实现的图书室管理系统
  11. 安装CLOVER引导器到硬盘EFI分区
  12. 平安银行股票数据涨跌预测
  13. 数据挖掘 顶级期刊_数据挖掘顶级期刊与会议
  14. JAVA的教师档案管理系统_教师档案管理信息系统
  15. ETF基金定投策略回测分析
  16. uniapp 中使用彩色图标,引入阿里图库iconfont
  17. Greenplum【部署 04】GPSS扩展安装并使用GPKafka实现Kafka数据导入Greenplum数据库(安装包网盘分享)
  18. 互联网利用短信网关收发短信
  19. 论文查重一般包括哪些部分呢?
  20. 数据结构与算法学习笔记——图(Graph)

热门文章

  1. 飞速创新更新IPO招股书:计划募资约14亿元,向伟为实际控制人
  2. 计算机能力挑战2021,2021WER能力挑战赛——“人工智能”竞赛规则.docx
  3. 《MATLAB语音信号分析与合成(第二版)》:第4章 语音信号的线性预测分析
  4. 回车换行符 crlf 那点事
  5. C#中break 和 continue 和 return在if语句和for循环中的区别
  6. Bison 的构成与使用
  7. 存储和虚拟化服务器的对接,储存虚拟化
  8. OpenCV图形处理
  9. python画蝴蝶曲线图
  10. python plot画简单的曲线图