mplfinance:Python中的K线图绘制神器
除了使用内置的样式,也可以自定义柱子的颜色,比如我不想用传统的红绿色,也可以阳线用蓝色阴线用黄色。mplfinance库是一个功能强大且易于使用的Python库,适用于金融数据的可视化,特别是K线图的绘制。它的高度可定制化可以让我们方便的把各种分析指标和K线图结合起来显示。
K线图,又称蜡烛图或阴阳图,是金融市场中常用的一种技术分析工具,主要用于显示一段时间内证券、外汇、期货等资产价格的变动情况。
K线图起源于18世纪的日本大米市场,后来逐渐在全球金融市场得到广泛应用。
K线图是用图形表示一段时间内的开盘价、收盘价、最高价和最低价。每个K线代表一个时间周期,可以是分钟、小时、日、周等。
K线图的阳线表示该时段内收盘价高于开盘价,阴线则表示收盘价低于开盘价。
K线图原本是matplotlib
中的一个模块,后来随着其发展,功能越来越多,目前已经单独出来成为一个独立的模块。
安装很简单:
pip install --upgrade mplfinance
1. 数据准备
数据使用A股历史日交易数据,下载地址:
下面的示例中使用2023年的数据:
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
# 为了显示中文
matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
matplotlib.rcParams["axes.unicode_minus"] = False
# 读取数据
fp = "./data/2023/历史行情数据-东财-前复权-2023.zip"
df = pd.read_csv(fp, compression="zip")
# 将股票代码转成字符串并填充成 6 位
df["股票代码"] = df["股票代码"].apply(lambda x: str(x).zfill(6))
df
使用mplfinance
绘制K线图时,对数据的列和索引有要求:
- 索引的名称必须是
Date
,且是DateTimeIndex
类型 - 用于绘图的5个字段名称必须是
Open
,Close
,Low
,High
,Volume
。
所以,把上面的数据稍微整理下,变成下面的格式:
# 修改列名
df = df.rename(
{
"日期": "Date",
"开盘": "Open",
"收盘": "Close",
"最低": "Low",
"最高": "High",
"成交量": "Volume",
},
axis=1,
)
# 将 Date 列设为索引
df.index = df["Date"].astype("datetime64[ns]")
df = df.sort_index()
# 去除不需要的列
df = df.loc[:, ["股票代码", "Open", "Close", "Low", "High", "Volume"]]
df
2. 样式设置
有了上面的数据,就可以挑选其中一只股票,看看默认绘制的图形:
# 全年数据太多,这里随便选了一支股票
data = df[df["股票代码"] == "601288"]
# 显示其中一段数据显示
mpf.plot(data.iloc[70:200])
默认的图形非常简约,和平时看到的K线图差别挺大的。
2.1. 内置样式
mplfinance
内置了很多样式。
>>> mpf.available_styles()
['binance',
'binancedark',
'blueskies',
'brasil',
'charles',
'checkers',
'classic',
'default',
'ibd',
'kenan',
'mike',
'nightclouds',
'sas',
'starsandstripes',
'tradingview',
'yahoo']
随便挑选几个看看:
mpf.plot(data.iloc[:50], type="candle", style="binance", title="style biance")
mpf.plot(data.iloc[100:150], type="candle", style="charles", title="sytle charles")
mpf.plot(data.iloc[150:200], type="candle", style="yahoo", title="style yahoo")
2.2. 自定义颜色
除了使用内置的样式,也可以自定义柱子的颜色,比如我不想用传统的红绿色,也可以阳线用蓝色,阴线用黄色。
mc = mpf.make_marketcolors(up='b',down='y')
s = mpf.make_mpf_style(marketcolors=mc)
mpf.plot(data.iloc[150:200], type="candle", style=s)
3. 绘图定制
经过这么多年的发展,mplfinance
非常灵活,可以完成一些特殊的显示要求。
3.1. 特定值颜色
除了改变阳线和阴线的颜色,还可以标记出特定值的颜色。
比如,下面将收盘价(Close
)最高和最低的3个值标记成不同的颜色。
# 紫色和金黄色
mc = mpf.make_marketcolors(up="m", down="gold")
cdata = data.iloc[150:200]
# 收盘价最高和最低的3个值
nmax = cdata["Close"].nlargest(3)
nmin = cdata["Close"].nsmallest(3)
mco = [None]*len(cdata)
for i in range(len(mco)):
if cdata.iloc[i].name in nmax or cdata.iloc[i].name in nmin:
mco[i] = mc
mpf.plot(cdata, type="candle", style="yahoo", marketcolor_overrides=mco)
3.2. 添加新的图形
K线图上除了绘制阳线和阴线的蜡烛图,还可以添加自定义的曲线。
比如,添加一条曲线,表示每天最大值和最小值的平均值。
lines = [
mpf.make_addplot((cdata["Low"]+cdata["High"])/2, color="b", width=1),
]
mpf.plot(cdata, type="candle", style="yahoo", addplot=lines)
图中蓝色的线就是每天最大值和最小值的平均值的曲线。
此外,K线图上可以简单的通过设置参数 volume=True
,显示每天交易量的变化。
mpf.plot(cdata, type="candle", style="yahoo", addplot=lines, volume=True)
4. 动态绘制
最后,再介绍一个动态绘制K线图的方法。
import matplotlib.animation as animation
s = mpf.make_mpf_style(
base_mpf_style="yahoo",
rc={"font.family": "Microsoft YaHei Mono"},
)
pkwargs = dict(type="candle", style=s)
fig, axes = mpf.plot(
data.iloc[0:200],
returnfig=True,
volume=True,
figsize=(11, 8),
panel_ratios=(2, 1),
title="动态显示K线图",
**pkwargs
)
ax1 = axes[0]
ax2 = axes[1]
def animate(ival):
cdata = data.iloc[0 : (200 + ival)]
ax1.clear()
ax2.clear()
mpf.plot(cdata, ax=ax1, volume=ax2, **pkwargs)
ani = animation.FuncAnimation(fig, animate, interval=200, frames=10)
ani.save("./ani.gif")
如果你需要实时或者定时(时间间隔比较短)显示股票的信息,那么动态绘制就是你需要的功能。
5. 总结
mplfinance
库是一个功能强大且易于使用的Python库,适用于金融数据的可视化,特别是K线图的绘制。
它的高度可定制化可以让我们方便的把各种分析指标和K线图结合起来显示。
题外话
感谢你能看到最后,给大家准备了一些福利!
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python兼职渠道推荐*
学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
若有侵权,请联系删除
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)