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

一、绘制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))

金融计算器

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/107967268