目录
一、说明
三、介绍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上显示,必须符合以下约束:
- 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 pddataframe = 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 pddataframe = 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")