本文介绍: 直到最近我才发现 matplotlib一个单独的库/模块专门用于财务绘图。它称为 mplfinance,在本文中,我将展示它的一些不错且非常独特的功能。注意,我们这里的意义,不是尝试显示数据最后目的,而是用这些原始数据完成我们自己交易策略代码实现,因此,这种原生数据通过其它工具软件获得的策略建议要有意义的多。

目录

一、说明

二、数据获取工具Tushare

2.1 Tushare简介

2.2 Tushare安装

三、介绍mplfinance模块

3.1 mplfinance — matplolib 用于绘制财务数据的不为人知的库

 3.2 安装

四、mplfinance显示财务数据

4.1 显示数据约定

4.2 数据预处理

4.3 预处理代码解释 

4.4 股市数据显示

4.5 结果图

五、mplfinance的各种绘图风格

5.1 OHLC图表

5.2 OHLC图表追加对比线

5.3 蜡烛图

5.4 莲子图

5.5 点数图

5.6 添加样式和一般美化

六、保存文件


一、说明

        直到最近我才发现 matplotlib一个单独的库/模块专门用于财务绘图。它称为 mplfinance,在本文中,我将展示它的一些不错且非常独特的功能。注意,我们这里的意义,不是尝试显示数据最后目的,而是用这些原始数据完成我们自己的交易策略代码实现,因此,这种原生数据通过其它工具软件获得的策略建议要有意义的多。

二、数据获取工具Tushare

2.1 Tushare简介

        Tushare一个免费开源python财经数据接口包。主要实现股票金融数据从数据采集清洗加工 到 数据存储过程能够金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略模型研究实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析可视化。当然,如果您习惯了用Excel或者关系数据库分析,您也可以通过Tushare的数据存储功能,将数据全部保存本地后进行分析。应一些用户请求,从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定

        Tushare还在不断的完善和优化,后期将逐步增加港股、期货外汇和基金方面的数据,所以,您的支持和肯定才是Tushare坚持下去的动力。

        为了更好的为用户提供服务,特地建立了一个收费群“Tushare会员群”:621499723,每人200元,送2000积分。(可以通过捐助里面二维码支付并留下QQ号即可),会员能获得更多数据和技术相关服务

2.2 Tushare安装

pip install tushare

三、介绍mplfinance模块

3.1 mplfinance — matplolib 用于绘制财务数据的不为人知的库

        众所周知,matplotlib 用途广泛,几乎可以用来创建您想要的任何类型图表。它可能不是最简单或最漂亮的,但在 StackOverflow查看足够多的问题后,它很可能最终会很好地解决问题

        我知道可以在纯 matplotlib创建烛台图等财务图表,但这并不是最愉快的体验使用 plotly 或 altair 等库可以更轻松地完成操作

        然后我们下载处理股票价格——在这篇文章中,我们使用 Apple 从 2020 年下半年开始的股票价格。如果您对下载股票价格的更多详细信息感兴趣,可以查看我的另一篇文章

 3.2 安装

pip install --upgrade mplfinance
# For more information, see: https://pypi.org/project/mplfinance/

四、mplfinance显示财务数据

4.1 显示数据约定

       1)从tushare得到股票数据:

dataframe = ts.get_hist_data('000881')
# 其中:’000881‘是股票编号

      2)要想在mplfinance上显示,必须符合以下约束

4.2 数据预处理

#import mplfinance as mpf
import tushare as ts
import pandas as pd


dataframe = ts.get_hist_data('000881')
dataframe.columns=['Open', 'High', 'Close', 'Low', 'Volume', 'price_change', 'p_change','ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20', 'turnover']
date_time = pd.to_datetime(dataframe.index)
dataframe.index = date_time
dataframe.index.name='Date'

4.3 预处理代码解释 

1)对columns的名称进行改名:

        dataframe.columns=[Open‘, ‘High‘, ‘Close’, ‘Low‘, ‘Volume’,price_change‘, ‘p_change‘,’ma5’, ‘ma10’, ‘ma20’, ‘v_ma5′, ‘v_ma10′, ‘v_ma20′, ‘turnover‘]

       columns的 原始数据:

[open‘, ‘high’, ‘close‘, ‘low‘, ‘volume’, ‘price_change‘, ‘p_change‘,’ma5’, ‘ma10’, ‘ma20’, ‘v_ma5′, ‘v_ma10′, ‘v_ma20’, ‘turnover‘]

2)原index名称“date”,改成“Date”

        dataframe.index.name=’Date’

3)原index类型string,改成date后重新索引

        date_time = pd.to_datetime(dataframe.index)
        dataframe.index = date_time

4.4 股市数据显示

import mplfinance as mpf
import tushare as ts
import pandas as pd


dataframe = ts.get_hist_data('000881')
dataframe.columns=['Open', 'High', 'Close', 'Low', 'Volume', 'price_change', 'p_change','ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20', 'turnover']
date_time = pd.to_datetime(dataframe.index)
dataframe.index = date_time
dataframe.index.name='Date'

mpf.plot(dataframe,type='line')
mpf.plot(dataframe, type='line', mav=(2, 5, 10))
mpf.plot(dataframe, type='line', mav=(2, 5, 10), volume=True)
mpf.plot(dataframe,type='line',mav=(2, 5, 10), volume=True,show_nontrading=True)

4.5 结果

 

五、mplfinance的各种绘图风格

5.1 OHLC图表

        mplfinance 提供了几种有助于分析资产价格模式图表第一个是 OHLC 图表,也是库中默认图表。我们可以通过简单使用 plot 函数创建它:

mpf.plot(df["2020-12-01":])

        其中 df包含 OHLC 数据和 DatetimeIndex 的 pandas DataFrame。我们仅将数据限制为上个月,以便清楚地看到情节元素形状

        解释与烛台图非常相似左边的水平线表示开盘价,右边的水平线表示收盘价。垂直线代表价格的波动,我们可以从两个极端读取高/低价格。

        在这一点上,值得一提的是,mplfinance 提供了一种在一张图表上堆叠多层信息简单方法例如假设我们想要将最高价和最低价作为线添加到先前创建的图中。我们可以使用 make_addplot 函数轻松做到这一点,如下所示。我们首先定义附加线,然后将它们作为附加参数传递给 plot 函数

5.2 OHLC图表追加对比线

extra_plot  = mpf.make_addplot(df.loc["2020-12-01":, ["High","Low"]])
mpf.plot(df["2020-12-01":], addplot=extra_plot)

        运行代码生成以下图像,它仅确认直线的极端对应给定日期的最高价和最低价。 

        当然,这是一个简化例子。在更复杂的情况下,我们可能有兴趣添加一技术指标例如布林带或简单移动平均线。我们很快就会回到后者。我们还可以使用相同函数创建显示我们进入/退出位置符号

5.3 蜡烛图

        可用图表类型的下一个是烛台图。使用 mplfinance 生成它们就像向 plot 函数添加一个额外参数一样简单

mpf.plot(df["2020-12-01":], type="candle")

        当您查看蜡烛和日期时,很明显那里缺少一些日期。这自然是因为市场在周末和一些特殊日子休市。如果你想考虑到这一点,你可以为 plot 函数提供一个额外参数

mpf.plot(df["2020-12-01":], type="candle", show_nontrading=True)

        让我们向情节添加更多信息。首先,我们可以将一个方便的参数传递给 plot 函数 — mav — 它会自动添加我们想要的任何简单移动平均线。对于此图,让我们采用 10 天和 20 天均线。其次,我们还可以添加交易量。

mpf.plot(df, type="candle", mav=(10, 20), volume=True)

5.4 莲子图

        老实说,mplfinance 是我第一个看到以下两种图的地方,因为它们不如 OHLC 和烛台图受欢迎。第一个称为 Renko 图表,它是使用价格变动构建的,没有像大多数图表那样考虑标准化时间间隔

        它在实践中的意思是,当价格移动定量创建一个新块,并且每个后续块都以与前一个块成 45 度角的方式添加,无论是在它的上方还是在它的下方。

        Renko 图表最常见用途是滤除价格序列中噪音并帮助识别价格趋势。这是因为所有小于指示框大小的价格变动都被过滤掉了。

        我们可以通过使用 plot 函数时简单指定类型参数创建 Renko 图表。

mpf.plot(df,type="renko")

        我们也可以根据自己的喜好修改积木的大小。在下面的代码片段中,我们将其设置为 2。

mpf.plot(df, type="renko", renko_params=dict(brick_size=2))

5.5 点数

        库中可用的最后一种图表是点数图。与 Renko 图表类似,它没有考虑时间的流逝。 P&F 图表使用堆叠的 X 和 O 的列,其中每个符号代表特定的价格变动(由框大小决定,我们可以根据自己的喜好进行调整)。

        X代表价格上涨一定幅度,而O代表下跌。我们需要的最后一条信息创建不同符号新列条件(O 跟随 X,反之亦然)。为了创建一个新列,价格必须改变反转量,通常设置为框大小的三倍(在 mplfinance 中,默认值为 1)。

mpf.plot(df, type="pnf")

        我们可以轻松地将此 P&F 图与第一个 Renko 图进行比较,以查看完全相同模式

5.6 添加样式和一般美化

        使用 mplfinance 创建绘图已经非常适合单线显示,因此绝对不会在纯 matplotlib 中经常发生的事情。但是,我们可以在 plot 函数中使用更多可用选项,使我们的绘图更加漂亮。

        对于下一个图,我们更改图形的比例,添加标题选择紧凑的布局应用样式。我们使用 binance 风格,这使得情节类似于流行的加密货币交易所提供的情节。

mpf.plot(df, figratio=(10, 6), type="candle", 
         mav=(21), volume=True,
         title = f"Price of {TICKER}",
         tight_layout=True, style="binance")

        就我个人而言,我会说这对于我们必须编写额外代码量来说是一个很大的改进。如果你对库中哪些样式感到好奇,可以使用以下命令查看所有样式

mpf.available_styles()

六、保存文件

        最后,我们还可以轻松地将图形保存到本地文件。为此,我们只需要文件名提供给 plot 函数的 savefig 参数。代码如下所示

mpf.plot(df, figratio=(10, 6), type="candle", 
         mav=(21), volume=True,
         title = f"Price of {TICKER}",
         tight_layout=True, style="binance", 
         savefig=f"{TICKER}.png")

原文地址:https://blog.csdn.net/gongdiwudu/article/details/130738441

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44958.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注