python写的模块:财务管理中关于时间价值的函数
2007-09-04 13:39
711 查看
因为工作关系经常需要计算终值、现值、利率等,所以把经常需要用的财务管理中关于时间价值的函数写成了模块。
#!/usr/bin/python #-*- coding: utf8 -*- u'''财务管理中与时间价值相关函数 变量的含义: f 终值 p 现值 a 年金。da:递延年金;ya:永续年金;ja:即付年金 i 利率 n 总期数,如果有递延期则含递延期 s 递延期 ''' def f2p(f, i, n): u'''求复利现值,f为1时返回值为复利现值系数''' return f * pow(1.0 + i, 0 - n) def p2f(p, i, n): u'''求复利终值,p为1时返回值为复利现值系数''' return p * pow(1.0 + i, n) def a2p(a, i, n): u'''求普通年金现值,a为1时返回值为普通年金现值系数''' return a * ((1.0 - pow(1.0 + i, 0 - n)) / i) if i else a * n def a2f(a, i, n): u'''求普通年金终值,a为1时返回值为普通年金终值系数''' return a * ((pow(1.0 + i, n) - 1.0) / i) if i else a * n def f2a(f, i, n): u'''求偿债基金,已知终值求年金''' return f / a2f(1.0, i, n) def p2a(p, i, n): u'''求年资本回收额,已知现值求年金''' return p / a2p(1.0, i, n) def da2p(a, i, n, s): u'''求递延年金现值''' return a2p(a, i, n) - a2p(a, i, s) def da2f(a, i, n, s): u'''求递延年金终值''' return a2f(a, i, n) - a2f(a, i, s) def ya2p(a, i): u'''求永续年金现值''' return a / i def ja2f(a, i, n): u'''求即付年金终值''' return a * (a2f(1.0, i, n + 1) - 1) def ja2p(a, i, n): u'''求即付年金现值''' return a * (a2p(1.0, i, n - 1) + 1) def pf2i(p, f, n): u'''已知现值、终值求复利利率''' return pow(f * 1.0 / p, 1.0 / n) - 1.0 def ap2i(a, p, n): u'''已知现金流现值,年金,求利率''' fun = lambda li: a2p(a, li, n) - p return __lilv(fun) def af2i(a, f, n): u'''已知现金流终值,年金,求利率''' fun = lambda li: a2f(a, li, n) - f return __lilv(fun) def dap2i(a, p, n, s): u'''已知递延年金现值,年金,期数,求利率''' fun = lambda li: da2p(a, li, m, s) - p return __lilv(fun) def daf2i(a, f, n, s): u'''已知递延年金终值,年金,期数,求利率''' fun = lambda li: da2f(a, li, n, s) - f return __lilv(fun) def jap2i(a, p, n): u'''已知即付年金现值,年金,期数,求利率''' fun = lambda li: ja2p(a, li, n) - p return __lilv(fun) def jaf2i(a, f, n): u'''已知即付年金终值,年金,期数,求利率''' fun = lambda li: ja2f(a, li, n) - f return __lilv(fun) def c2i(t): u'''已知各期现金流,求收益率。资本回收额、偿债基金可理解为各期现金流相等的情况。 t 各期现金流构成的序列。现金净流入为正数,净流出为负数。 序列的长度为期间+1,t 为第n期期末现金流、t[n-1]为第n期期初现金流。 例:初始投资50000,8各月后付息2000,20个月后付息3000,24个月后还本付息共51000,月收益率为: >>> a = [0] * 25 >>> a[0] = -50000 >>> a[8] = 2000 >>> a[20] = 3000 >>> a[24] = 51000 >>> c2i(a) 0.0048987448215484699 年收益率为:1.0048987448215484699 ** 12 - 1 = 0.060394936320462556 ''' tn = len(t) if tn == 0: return None fun = lambda li, t: sum(f2p(v, li, k) for k, v in enumerate(t) if v != 0) # 按终值计算是下面的函数,结果一样 #fun = lambda li, t: sum(p2f(v, li, tn - k) for k, v in enumerate(t) if v != 0) return __lilv(fun, t) def __lilv(fun, *arg, **kw): u'''采用逐步逼近法,从现金流公式中求利率 fun 现金流公式 arg 现金流公式需传入的参数 kw 传入要求精度等附加信息 ''' up, down = None, None jindu1 = kw.get('jindu', 0.005) # 如果没有传入精度要求信息,则默认为±0.005 jindu2 = jindu1 * -1 for j in range(1000): if up != None and down != None: i = (up + down) / 2.0 else: i = ((j % 2) * 2 - 1) * 2 ** j * 0.2# 设置可能的上下限,值为:-0.2、0.4、-0.8、1.6、…… ca = fun(i, *arg) if ca > jindu1: # 现金流现值 >= 初始投资,折现率太低。重新确定折现率下限 down = i elif ca < jindu2: # 现金流现值 <= 初始投资,折现率太高。重新确定折现率上限 up = i else: return i raise ValueError
相关文章推荐
- 关于Python的time模块常用函数
- python小白开学啦~第二讲 关于 函数,迭代,模块
- python 关于自定义 模块(类,函数),包的导入
- python入门:关于堆操作的一个模块heapq及其函数
- think python学习心得-(1)关于函数和模块
- 【python】详解time模块功能asctime、localtime、mktime、sleep、strptime、strftime、time等函数以及时间的加减运算
- python的timeit模块测函数运行时间
- python基础:os模块中关于文件/目录常用的函数使用方法
- python例子-关于时间time模块
- Python 关于集合的方法函数和相关模块(利于做排重)
- python 关于时间模块的总结1
- 装饰器应用,Python模块学习之(__call__)实现准确计算函数运行时间
- os、os.path 模块中关于文件、目录常用的函数使用方法(python)
- 【脚本语言系列】关于Python进程线程管理系统模块,你需要知道的事
- 关于python中inspect模块的一些探究
- Python: 使用装饰器“@”取得函数执行时间
- python函数一日一发--关于divmod函数
- python中关于路径获取的相关函数总结
- 关于os模块中查看文件时间的几种用法
- python string模块内建函数