python通过新 mplfinance 模块绘制 k 线图
最近绘制 k 线图发现mplfinance
从matplotlib
中独立出来了,作为一个单独的模块,并且可以直接使用Pandas
的DataFrames
。这里简单记录一下如何用新的mplfinance
绘制一个 k 线图。
只需要查看代码的,请滑到最后。
环境安装
数据使用的是Tushare提供的接口,这个接口也更新到了 pro版本,需要注册后使用。这里需要注意的是,调用不同的数据需要不同的积分,增加积分可以通过邀请新用户。注册链接
安装 tushare
pip install tushare
安装mplfinance
pip install mplfinance
如果环境里没有pandas
的,需要把它也安装一下,安装指令:pip install pandas
。
绘制 k 线图
1、导入包
import tushare as tsimport mplfinance as mpfimport pandas as pd
2、从Tushare 获取数据
由于tushare
升级了,貌似现在只能调用 pro 接口,调用的时候需要填写自己的token
,这个需要登陆它的官网,在个人中心查看。
# 这里填写自己的 tokenpro = ts.pro_api("xxxx")# 这里获取的是日数据,股票代码:600519.SH, 开始日期:2001,结束日期:2011df = pro.daily(ts_code='600519.SH', start_date='2001', end_date='2011')
这里我调用的是日数据,还可以调用周数据pro.weekly
,月数据pro.daily
。更多的数据接口可以上Tushare
官网查看。
接口参数
3、清洗数据
从Tushare
获取的数据有很多,有股票代码、交易日期、开盘价、收盘价和涨跌幅等等,那我们绘制 k 线图需要哪些数据呢?mplfinance
文档中已经说明了:
where
data
is aPandas DataFrame
object containing Open, High, Low and Close data, with a PandasDatetimeIndex
.
数据必须是Pandas DataFrame
格式,必须包含开盘价、最高价、最低价和收盘价,需要使用DatetimeIndex
作为索引。
虽然说得很简单,但字字如金,每个字都很重要,因为我就在这里被困了一晚上。🤣
代码:
# 删除 tushare 提供的不需要的数据,保留 Date, Open, High, Low, Close, Volume# 保留Volume是可选的,保留了就可以在后面画图成交量的图df = df.drop(labels=["ts_code", "pct_chg", "pre_close", "amount", "change"], axis=1)# 对数据进行改名,mplfinance名字必须是Date, Open, High, Low, Close, Volumedf.rename(columns={'trade_date':'Date', 'open':'Open', 'high':'High', 'low':'Low', 'close':'Close', 'vol':'Volume'}, inplace=True)# 从 tushre下载的数据是按时间倒叙的,也就是从现在到过去的数据,这里把它改成从过去到现在的数据df = df[::-1]# 把 Date 这列数据设置成索引,必须的,不设置会报错。df.set_index(["Date"], inplace=True)# 把 Date这列数据装换成datetime 格式,也是 mplfinance 要求的df.index = pd.to_datetime(df.index)
4、绘图
mpl.plot(df, type='candle',mav=(3,6,9), volume=True)
type='candle'
是绘制 k 线图,也可以指定其他的图,例如:type='ohlc'
,type='line'
,type='renko'
, 或type='pnf
,默认是ohlc
mav
是设置均线,就是下图中的三条不同颜色的线;volume
是成交量图,就是图下方的柱状图,如果数据中没有Volume
则无法绘制此图。
完整代码
运行时需要填写自己的 token
# -*- coding: utf-8 -*-import tushare as tsimport pandas as pdimport mplfinance as mpfdef main():# 这里需要填写自己的 tokenpro = ts.pro_api("xxxx")df = pro.daily(ts_code='600519.SH', start_date='2001', end_date='2011')# 删除 tushare 提供的不需要的数据,保留 Date, Open, High, Low, Close, Volumedf = df.drop(labels=["ts_code", "pct_chg", "pre_close", "amount", "change"], axis=1)# 对数据进行改名,mplfinance有要求df.rename(columns={'trade_date': 'Date', 'open': 'Open', 'high': 'High', 'low': 'Low', 'close': 'Close', 'vol': 'Volume'},inplace=True)# 转换时间序列df = df[::-1]# 将Date设置为索引,并转换为 datetime 格式df.set_index(["Date"], inplace=True)df.index = pd.to_datetime(df.index)mpf.plot(df, type='candle', mav=(3, 6, 9), volume=True)if __name__ == '__main__':main()
colab在线运行
参考资料
mplfinance
Tushare
如果觉得《python通过新 mplfinance 模块绘制 k 线图》对你有帮助,请点赞、收藏,并留下你的观点哦!