Python之数据分析(finance金融计算模块)

2023-05-16

文章目录

      • 一、绘制K线图
      • 二、金融计算器之终值、现值、净现值
      • 三、金融计算器之内部收益率、每期支付、要还的期数、年利率
      • 四、金融计算器练习代码

一、绘制K线图

1、导入库:import mpl_finance as mf

2、调用

  • mf.candlestick_ohlc(坐标图对象, 开盘价最高价最低价收盘价, K线实体部分宽度(0-1), 阳线颜色, 阴线颜色)

3、测试代码

import numpy as np
import matplotlib.pylab as mp
import matplotlib.dates as md
import mpl_finance as mf
import datetime as dt

def dmy2ymd(dmy):
    dmy = str(dmy, encoding='utf-8')
    # 利用python能够解析日-月-年的时间格式,来解析成时间信息,再转化成年-月-日的numpy时间格式
    date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()  # 得到日期子对象
    ymd = date.strftime('%Y-%m-%d')  # 将时间信息格式化成字符串
    return ymd

# 读取数据:skiprows=1表示跳过第一行(表头字段)
dates, opening_prices, high_prices, lowest_prices, closing_prices = np.loadtxt(
    '0=数据源/beer_price.csv',delimiter=',',
    usecols=(0, 1, 2, 3, 4), unpack=True,
    dtype='M8[D], f8, f8, f8, f8',
    skiprows=1,
    converters = {0:dmy2ymd}
)

# 图像基本参数
mp.figure('Candlestick', facecolor='lightgray')
mp.title('Candlestick', fontsize=20)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
# 与日期相关的主定位器
ax =mp.gca()
ax.xaxis.set_major_locator(md.MonthLocator(), )
# 定位器格式
ax.xaxis.set_major_formatter(md.DateFormatter('%Y %m %d'))
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')

# 时间转换与数据处理
dates = dates.astype(md.datetime.datetime)
dates = md.date2num(dates)
# 将取出的数据合并成一个二维数组
ohlcs = np.column_stack((dates, opening_prices, high_prices, lowest_prices, closing_prices))

# 绘制K线图
mf.candlestick_ohlc(mp.gca(), ohlcs, 0.8, 'dodgerblue', 'limegreen')


mp.gcf().autofmt_xdate()
mp.show()

K线图

二、金融计算器之终值、现值、净现值

1、终值计算

  • 终值 = numpy.fv(利率, 期数, 每期支付, 现值)
  • 例子:将1000元以2%的年利率存入银行5年,每年加存100元,到期后本息合计多少钱?
  • 注意:每期支付用负数,表示存入(扣钱),现值也用负数,表示存入。同理,正数则表示收入(多钱)。
  • round(fv, 2)表示用两位小数表示数据fv

2、现值计算

  • 现值 = numpy.pv(利率, 期数, 每期支付, 终值)

3、净现值计算

  • 净现值 = numpy.npv(利率, [现值, 存入1, 存入2, …, 存入n])
  • 例子:将1000元以2%的年利率存入银行5年,每年加存100元,相当于一次性存入多少钱?

三、金融计算器之内部收益率、每期支付、要还的期数、年利率

1、内部收益率计算

  • 内部收益率 = numpy.irr([净现值, 取出1, 取出2, …, 取出n])
  • 例子:将1000元存入银行5年,金后后逐年体现100元(第一年100,第二年200…),银行的年利率达到多少可在最后一次体现后偿清全部本息?即净现值为0.

2、每期支付

  • 每期支付 = numpy.pmt(利率, 期数, 现值)
  • 例子:以2%的年利率从银行贷款1000元,分5年还清,平均每年还多少钱?

3、待还期数计算

  • 待还期数 = numpy.nper(利率, 每期支付, 现值)
  • 例子:以2%的年利率从银行贷款1000元,平均每年还212.16元,多少年能还清(0元)?

4、利率计算

  • 利率 = numpy.rate(期数, 每期支付, 现值, 终值)
  • 例子:从银行贷款1000元,平均每年还212.16元,5年还清,则年利率是多少?

四、金融计算器练习代码

import numpy as np

# 计算终值
print('-----------------终值-------------------')
fv = np.fv(0.02, 5, -100, -1000)
print(round(fv, 2))

# 通过终值回算现值
print('-----------------现值-------------------')
pv = np.pv(0.02, 5, -100, fv)
print(pv)

# 求净现值
print('-----------------净现值-------------------')
npv = np.npv(0.02, [-1000, -100, -100, -100, -100, -100])
print(round(npv, 2))
# 验算净现值:每年存入为0
ffv = np.fv(0.02, 5, 0, npv)
print(round(ffv, 2))

# 求内部收益率
print('-----------------内部收益率-------------------')
irr = np.irr([-1000, 100, 200, 300, 400, 500])
print(round(irr, 2))
# 验算内部收益率
nnpv = np.npv(irr, [-1000, 100, 200, 300, 400, 500])
print(round(nnpv, 2))

# 求每期支付
print('-----------------每期支付-------------------')
pmt = np.pmt(0.02, 5, 1000)
print(round(pmt, 2))

# 多少期还清
print('-----------------还清期数-------------------')
nper = np.nper(0.02, pmt, 1000)
print(nper)

# 年利率是多少
print('-----------------年利率-------------------')
rate = np.rate(nper, pmt, 1000, 0)
print(round(rate, 2))

金融计算器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python之数据分析(finance金融计算模块) 的相关文章

  • 在函数内的 for 循环上使用 tqdm 来检查进度

    我正在使用 for 循环迭代目录树内的一大组文件 这样做时 我想通过控制台中的进度条来监视进度 因此 我决定使用 tqdm 来实现此目的 目前 我的代码如下所示 for dirPath subdirList fileList in tqdm
  • GUI 测试工具 PyUseCase 与 Dogtail 相比如何?

    GUI测试工具如何Py用例 http pypi python org pypi PyUseCase重命名为故事文本 http pypi python org pypi StoryText 相比于Dogtail http en wikiped
  • docker 容器中的“(pygame parachute)分段错误”

    尝试在 docker 容器中使用 pygame 时出现以下错误 我想从容器中获取显示 Fatal Python error pygame parachute Segmentation Fault 重现 Docker已安装 docker ru
  • 从内存地址创建python对象(使用gi.repository)

    有时我需要调用仅存在于 C 中的 gtk gobject 函数 但返回一个具有 python 包装器的对象 之前我使用过基于 ctypes 的解决方案 效果很好 现在我从 PyGtk import gtk 切换到 GObject intro
  • DynamodB:如何更新排序键?

    该表有两个键 filename 分区键 和eventTime 排序键 我要更新eventTime对于某些filename Tried put item and update item 发送相同的filename与新的eventTime但这些
  • pyCUDA无法打印结果

    最近 我使用 pip 为我的 python3 4 3 安装 pyCUDA 但我在测试示例代码时发现 https documen tician de pycuda tutorial html getting started https doc
  • 使用 Boto3 超时的 AWS Lambda 函数

    我已经解决了我自己的问题 但无论如何我都会发布它 希望能节省其他人几个小时 我在 AWS 上有一个无服务器项目 使用 Python 将记录插入到 kinesis 队列中 但是 当我使用 boto3 client kinesis 或 put
  • Python Requests 库重定向新 url

    我一直在浏览 Python 请求文档 但看不到我想要实现的任何功能 在我的脚本中我设置allow redirects True 我想知道该页面是否已重定向到其他内容 新的 URL 是什么 例如 如果起始 URL 为 www google c
  • 会话数据库表清理

    该表是否需要清除或者由 Django 自动处理 Django 不提供自动清除功能 然而 有一个方便的命令可以帮助您手动完成此操作 Django 文档 清除会话存储 https docs djangoproject com en dev to
  • 了解 Python 2.7 中的缩进错误

    在编写 python 代码时 我往往会遇到很多缩进错误 有时 当我删除并重写该行时 错误就会消失 有人可以为菜鸟提供 python 中 IndentationErrors 的高级解释吗 以下是我在玩 CheckIO 时收到的最近 inden
  • Pandas 字典键到列[重复]

    这个问题在这里已经有答案了 我有一个像这样的数据框 index column1 e1 u c680 5 u c681 1 u c682 2 u c57 e2 u c680 6 u c681 2 u c682 1 u c57 e3 u c68
  • pandas groupby 操作缺少数据

    在 pandas 数据框中 我有一列如下所示 0 M 1 E 2 L 3 M 1 4 M 2 5 M 3 6 E 1 7 E 2 8 E 3 9 E 4 10 L 1 11 L 2 12 M 1 a 13 M 1 b 14 M 1 c 15
  • 如何通过selenium中弹出的身份验证?

    我正在尝试使用带有 Selenium 的 Python 脚本加载需要身份验证的网页 options webdriver ChromeOptions prefs download default directory r download de
  • 如何将 URL 添加到 Telegram Bot 的 InlineKeyboardButton

    我想制作一个按钮 可以从 Telegram 聊天中在浏览器中打开 URL 外部超链接 目前 我只开发了可点击的操作按钮 update message reply text Subscribe to us on Facebook and Te
  • 在Python中使用pil读取tif图像时出现值错误?

    我必须读取尺寸的tif图像2200 2200并输入 uint16 我将 PIL 库与 anaconda python 一起使用 如下所示 from PIL import Image img Image open test tif img i
  • 根据标点符号列表替换数据框中的标点符号[重复]

    这个问题在这里已经有答案了 使用 Canopy 和 Pandas 我有数据框 a 其定义如下 a pd read csv text txt df pd DataFrame a df columns test test txt 是一个单列文件
  • 从给定的项目列表创建子列表

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • Chrome 驱动程序和 Chromium 二进制文件无法在 aws lambda 上运行

    我陷入了一个问题 我需要在 AWS lambda 上做一些抓取工作 所以我按照下面提到的博客及其代码库作为起点 这非常有帮助 并且在运行时环境 Python 3 6 的 AWS lambda 上对我来说工作得很好 https manivan
  • 超过两个点的Python相对导入

    是否可以使用路径中包含两个以上点的模块引用 就像这个例子一样 Project structure sound init py codecs init py echo init py nix init py way1 py way2 py w

随机推荐