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

目录

一、说明

二、数据获取工具Tushare

2.1 Tushare简介

2.2 Tushare安装

三、介绍mplfinance模块


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

        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号即可),会员能获得更多数据和技术相关服务

pip install tushare

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

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

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

       1)从tushare得到股票数据:

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

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

#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'

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

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)

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        使用 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()
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")

发表回复

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