3.1 mplfinance — matplolib 用于绘制财务数据的不为人知的库
一、说明
直到最近我才发现 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 显示数据约定
dataframe = ts.get_hist_data('000881')
# 其中:’000881‘是股票编号。
- 1) data必须是pandas.DataFrame数据类型,对所包含的列也有要求。(自然满足)
- 2) 必须包含’Open’, ‘High’, ‘Low’ 和 ‘Close’ 数据(注意:首字母是大写的)。
- 3)而且行索引必须是pandas.DatetimeIndex。
- 4)行索引的名称必须是’Date‘(同理注意首字母大写),
- 5)此外还有一列是’Volume’,如果绘制成交量这一列是必须的。
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 预处理代码解释
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‘]
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进行投诉反馈,一经查实,立即删除!