Pycharm⾦融Python实战⼆:⽤Python编写⼀个⾦融计算器——编写函数调⽤
命令。。。
⽤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)**n
matlab是仿真软件吗return 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)**n
return 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)**n
return 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)**n
return pv
from 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)**n
return pv
import python33
print(pv_f(100,0.1,2))
结果
82.64462809917354
82.64462809917354
后⾯⽤del()可以删除指定的函数或变量
def pv_f(fv,r,n):
pv= fv/(1+r)**n
return pv
import 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 rate
return 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]
url组成部分包括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.0
for i, cashflow in enumerate(cashflows):
total+=cashflow/(1+rate)**i
return total
r=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.0
for i, cashflow in enumerate(cashflows):
total+=cashflow/(1+rate)**i
return total
python入门教程编辑器def IRR_f(cashflows,interations=100):
rate=1.0
investment=cashflows[0]
for i in range(1,interations+1):
rate*=(1-npv_f(rate,cashflows)/investment)
return rate
cashflows=[-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%,我们会接受这个项⽬。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论