文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mplfinance 一个堪称完美python量化金融可视化工具详析

2023-09-11 14:51

关注

文章目录


1.mplfinance安装

使用清华源快速安装mplfinance库,执行以下命令即可:

pip install mplfinance -i https://pypi.tuna.tsinghua.edu.cn/simple

2.获取数据(从tushare接口)

使用tushare的接口获取金融数据,将数据格式化后,并保存为csv文件。
从tushare获取数据需要密匙,具体可以去tushare官网注册账号获取。
我们获取数据后,需要将其索引设置为时间序列的数据,并将列名更改为mplfinance库适用的格式,即下边的’trade_date’, ‘open’, ‘high’, ‘low’, ‘close’, ‘vol’。
最后将时间倒序排列。
获取数据需要传入的参数是股票代码,此外为了便于识别数据文件对应的上市公司,我们也获取了股票列表以根据股票代码匹配上市公司名字。考虑到文件命名不能存在星号*,但是被警告或将退市的上市公司的名字前边可以冠以*ST或**ST。当遇到这样的情况时,将星号改为汉字“星之”即可。
以平安银行的数据为例,平安银行对应的股票代码为"000001.SZ"。获取其数据并保存为csv文件。
现新建一个get_data.py文件,并编辑代码如下:

import tushare as tsimport pandas as pdtokenn = 'Your token'pro = ts.pro_api(tokenn)# 获取股票列表,以便提取股票名称stock_list = pro.stock_basic()def get_data(tscode):    df = pro.daily(ts_code=tscode)    df = df.loc[:, ['trade_date', 'open', 'high', 'low', 'close', 'vol']]    df.rename(columns={        'trade_date': 'Date',        'open': 'Open',        'high': 'High',        'low': 'Low',        'close': 'Close',        'vol': 'Volume'    },        inplace=True)       # 重定义列名,方便统一规范操作。    df['Date'] = pd.to_datetime(df['Date'])  # 转换日期列的格式,便于作图    df.set_index(['Date'], inplace=True)  # 将日期列作为行索引    df = df.sort_index()    return dfdef get_name(ts_code):    name = stock_list.name[stock_list['ts_code'] == ts_code].values[0]    if name[0] == '*':        name = '星之' + name[1:]    return namets_code = '000001.SZ'data = get_data(ts_code)name = get_name(ts_code)data.to_csv(name + '日线行情.csv')

保存好的数据如下图所示:
     在这里插入图片描述


3. 获取数据(从本地csv)

读取完数据后,如果直接对上边的变量data进行操作也是可以的,data已经满足mplfinance对数据要求的规范。
但是考虑到代码不断调试的过程,我们还是新建一个demo.py文件对上边获取到的'平安银行日线行情.csv'文件进行重新读取。
且读取后的数据,需要再对索引稍微做一点格式化。(即将时间列转换为时间序列数据格式,并设置为索引)

import mplfinance as mpfimport pandas as pddef read_data(filename):    df = pd.read_csv(filename)    df['Date'] = pd.to_datetime(df['Date'])    df.set_index(['Date'], inplace=True)    return df# 此时的数据,才满足mplfinance的数据的使用规范df = read_data('平安银行日线行情.csv')print(df)

符合规范的数据格式如下图所示
(不论你是怎么获取数据的,只要数据格式规范如此,即可继续随文章向下进行):
         在这里插入图片描述


4. mplfinance可视化

使用mplfinance库绘图,所有命令浓缩于mpf.plot()接口。故只需了解该接口的参数即可。
现将mpf.plot()接口主要参数示例如下。

参数描述
type绘制图线的种类
ylabely轴标签
style风格样式
title图表标题
mav均线,格式为一个元组,如(5, 10)表示绘制5日均线和10日均线
volume是否绘制量柱图,默认为False,表示不绘制。
figratio图像横纵比,如(5,3)表示图像长比宽为5:3。
ylabel_lower表示底部图像的标签(一般是量柱图)
savefig如果需要将图像保存为一个图片文件,则通过该参数指定文件路径即名字即可。不指定则默认不保存,但是图像会显示出来。如果指定了则图像不会直接显示出来。

其中参数type可以的取值有

type取值描述
candle蜡烛图
ohlcOHLC图,也称“美国线”。即用一根垂直的线段表示一天的行情,在开盘和收盘价格处划一笔刻度。
line直线,即近绘制收盘价曲线
renko砖形图
pnfpnf图,由圈和叉构成

(如果对图像有疑问可以百度了解,也可以自行测试)


其中参数style可以的取值有

style描述
‘binance’币安风格
‘blueskies’蓝天风格
‘brasil’巴西风格
‘charles’查理风格
‘checkers’跳棋风格
‘classic’古典风格
‘default’默认风格
‘mike’迈克风格
‘nightclouds’夜云风格
‘sas’SAS风格
‘starsandstripes’星条旗风格
‘yahoo’雅虎风格

这些参数值分别对应着不同的风格。此外还可以自定义风格,具体方法会在下边说到。


以 对平安银行2022年6-8月份行情数据,绘制一幅简单的蜡烛图 为例。使用蓝天风格(“blueskies”)。
并使用mav参数添加上5日均线和10日均线,以及附带上量柱图。

mpf.plot(df.loc['2022-6':'2022-8'],         type='candle',         ylabel="price",         style='blueskies',         title='PINGANBank from 2022-6-1 to 2022-8-31',         mav=(5, 10),         volume=True,         figratio=(5, 3),         ylabel_lower="Volume")

图像输出效果如下:
在这里插入图片描述
一幅美观的图表就这样绘制出来了。


5. 自定义风格样式

我们也可以使用mpf.make_mpf_style()方法来生成新的自定义风格。

mpf.make_mpf_style()方法可以使用的参数有

参数描述
base_mpf_style要继承的mplfinance风格
base_mpl_style要继承的matplotlib风格
marketcolors用于设置K线的颜色。使用mpf.make_marketcolors()方法生成。
mavcolors移动平均线的颜色
facecolor图像的填充颜色。指的是坐标系内侧的部分的颜色。
edgecolor坐标轴的颜色。
figcolor图像外周边填充色。
gridcolor网格线颜色。
gridstyle设置网格线样式,可以是’-', ‘–’, ‘-.’, ‘:’, ‘’, offset, on-off-seq
gridaxis网格线的方向,可以是’vertical’, ‘horizontal’, 或 ‘both’
y_on_right设置y轴的位置是否在右边
rc设置字体相关。中文和负号的正常显示问题都需要操作该参数。以字典形式传入。
legacy_rc也是用于设置字体格式的,不过与rc不同的是,rc仅会将rc中传入的值更新进字典,并保留原有其他字体参数。而legacy_rc会将所有原字典删除,而仅仅使用legacy_rc。
style_name风格名字,可以在使用mpf.write_style_file(style,filename)方法写自定义风格样式文件时使用。

其中,关于颜色的参数,也可以是rgb的格式,不过要求把元组变为字符串写入,形如figcolor=‘(107, 195, 224)’

下边绘制

import mplfinance as mpfimport pandas as pddef read_data(filename):    df = pd.read_csv(filename)    df['Date'] = pd.to_datetime(df['Date'])    df.set_index(['Date'], inplace=True)    return df# 获取数据df = read_data('平安银行日线行情.csv')# 设置线元素的颜色my_color = mpf.make_marketcolors(    up="red",  # 上涨K线的颜色    down="green",  # 下跌K线的颜色    edge="black",  # 蜡烛图箱体的颜色    volume="purple",  # 成交量柱子的颜色    wick="black"  # 蜡烛图影线的颜色)# 自定义风格my_style = mpf.make_mpf_style(    base_mpf_style='nightclouds',    # base_mpl_style='seaborn',  # 也可以试试matplotlib的seaborn等风格。    marketcolors=my_color,    figcolor='(0, 0.8, 0.85)',    gridcolor='(0.9, 0.9, 0.9)',    rc={'font.family': 'SimHei', 'axes.unicode_minus': 'False'})# 选择平安银行2022年8月的数据进行绘图mpf.plot(df.loc['2022-6':'2022-8'],         type='candle',         ylabel="price",         style=my_style,         title='平安银行6-8月 日线行情',         mav=(5, 10),         volume=True,         figratio=(5, 3),         ylabel_lower="Volume")

图像输出效果如下:
   在这里插入图片描述


6. 添加其他线条

mplfinance提供了添加多条线的方式。即通过mpf.plot()接口的addplot参数。
以添加唐奇安通道(20日唐奇安)的三条线为例,代码如下:

import mplfinance as mpfimport pandas as pddef read_data(filename):    df = pd.read_csv(filename)    df['Date'] = pd.to_datetime(df['Date'])    df.set_index(['Date'], inplace=True)    return dfdf = read_data('平安银行日线行情.csv')# 设定上、下、中通道线初始值upboundDC = pd.Series(0.0, index=df.Close.index)downboundDC = pd.Series(0.0, index=df.Close.index)midboundDC = pd.Series(0.0, index=df.Close.index)# 求唐奇安上、中、下通道for i in range(20, len(df.Close)):    upboundDC[i] = max(df.High[(i-20):i])    downboundDC[i] = min(df.Low[(i-20):i])    midboundDC[i] = 0.5 * (upboundDC[i] + downboundDC[i])df['upboundDC'] = upboundDCdf['downboundDC'] = downboundDCdf['midboundDC'] = midboundDCdata = df.loc['2022-5':'2022-8']my_color = mpf.make_marketcolors(    up="red",  # 上涨K线的颜色    down="green",  # 下跌K线的颜色    edge="black",  # 蜡烛图箱体的颜色    wick="black",  # 蜡烛图影线的颜色    volume="inherit"  # 继承up和down的颜色)# 设置图表的背景色 my_style = mpf.make_mpf_style(    base_mpl_style='seaborn',    marketcolors=my_color,    rc={'font.family': 'SimHei', 'axes.unicode_minus': 'False'})add_plot = [    mpf.make_addplot(data['upboundDC']),    mpf.make_addplot(data['midboundDC']),    mpf.make_addplot(data['downboundDC'])]mpf.plot(data,         type='candle',         ylabel="price",         style=my_style,         title='平安银行5-8月 日线行情',         addplot=add_plot,         mav=(5, 10),         volume=True,         figratio=(5, 3),         ylabel_lower="Volume")

输出图像效果如下:
   在这里插入图片描述


来源地址:https://blog.csdn.net/weixin_48964486/article/details/126711045

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯