想做量化但是不会画K线!这几个Python绘图库我全试了,只推荐这个…

0 阅读5分钟

image.png

嗨,我是花姐。

前几天,一个刚入门的粉丝私信我问:“花姐,K线图怎么用Python画?是不是很难?”

作为最宠粉丝的花姐,今天必须给我们这位粉丝安排上一期Python绘制K线的教程。

行情数据我们还是用老搭档xtquant+MiniQMT。具体代码如下:

import pandas as pd
from xtquant import xtdata

def get_hq(code,start_date='19900101',period='1d',dividend_type='front',count=-1):
    '''
    基于xtquant下载某个股票的历史行情
    盘中运行最后一个K里存了最新的行情
    period 1m、5m、1d
    dividend_type - 除权方式,用于K线数据复权计算,对tick等其他周期数据无效
    none 不复权
    front 前复权
    back 后复权
    front_ratio 等比前复权
    back_ratio 等比后复权
    '''
    xtdata.enable_hello = False
    if period not in['1m','5m','1d'] and 'm' in period:
        # 除了1m和5m的其它级别的需要先下载5m的
        xtdata.download_history_data(stock_code=code, period='5m', incrementally=True,start_time=start_date)
    else:
        xtdata.download_history_data(stock_code=code, period=period, incrementally=True,start_time=start_date)
    history_data = xtdata.get_market_data_ex([], [code], period=period, count=count, dividend_type=dividend_type,start_time=start_date,fill_data=False)
    df = history_data[code]
    if 'd' in period:
        df.index = pd.to_datetime(df.index.astype(str), format='%Y%m%d')
    if 'm' in period:
        df.index = pd.to_datetime(df.index.astype(str), format='%Y%m%d%H%M%S')
    df['time'] = df.index
    # 将列名 'date' 改为 'time'
    df.rename(columns={'time': 'date'}, inplace=True)
    return df

1️⃣ mplfinance:最“正宗”的那一个

说mplfinance之前,先问个问题——你听过matplotlib吧?对,就是那个最古老的画图工具。mplfinance其实就是它的“股票分支”。

你可能在想,那不就老古董了吗?

还真不是。虽然它长得老气,但胜在稳、清晰、社区活跃。如果你想追求那种传统交易软件风格的K线图,它是首选。

怎么安装:

pip install mplfinance

来看个例子:

import mplfinance as mpf

df = get_hq('000001.SZ',start_date='20240101',period='1d')
# 直接开画
mpf.plot(df, type='candle', volume=True, style='charles')

image.png 是不是有点意外?一行就搞定。图表那叫一个清清爽爽,交易量也一并带上了,适合搞策略的时候对照用。

很多朋友第一次用 mplfinance 画出来的K线图,发现颜色是默认的——绿涨红跌,看着就别扭。因为我们中国股民看惯了 红涨绿跌,这点“文化差异”属实影响观感😂

那么——mplfinance 可以改颜色吗?能!而且很简单!

# 直接开画
import mplfinance as mpf
import pandas as pd

df = get_hq('000001.SZ',start_date='20240101',period='1d')

# 自定义红涨绿跌的颜色风格
my_style = mpf.make_mpf_style(
    base_mpf_style='charles',  # 继承基础风格
    marketcolors=mpf.make_marketcolors(
        up='red',    # 涨:红色
        down='green',  # 跌:绿色
        edge='inherit',   # K线边框颜色(inherit 表示继承 up/down 颜色)
        wick='inherit',   # 上下影线颜色
        volume='inherit'  # 成交量颜色
    )
)

# 绘图
mpf.plot(df, type='candle', style=my_style, volume=True)

image.png


2️⃣ plotly:帅!炫!高端局必备

我本人对plotly体感一直很好,因为它酷到发光。鼠标一点,图表能动,能缩放,能弹窗。你在网页上一丢,专业感直接拉满。

安装:

pip install plotly

看代码:

import plotly.graph_objects as go
import pandas as pd

df = get_hq('000001.SZ',start_date='20240101',period='1d')

fig = go.Figure(data=[go.Candlestick(
    x=df['date'],
    open=df['open'],
    high=df['high'],
    low=df['low'],
    close=df['close']
)])
fig.show()

image.png 是不是有点像Web前端的味道?是的,它是前端出生的。如果你想搞个web版本的量化系统,强烈推荐plotly

plotly也是默认是 绿色涨、红色跌,这跟我们大A市场的“红涨绿跌”正好相反,观感怪怪的。

不过好消息是,我们可以用 increasing_line_colordecreasing_line_color 参数,就能搞定!

image.png

fig = go.Figure(data=[go.Candlestick(
    x=df['date'],
    open=df['open'],
    high=df['high'],
    low=df['low'],
    close=df['close'],
    increasing_line_color='red',    # 涨 = 红
    decreasing_line_color='green'   # 跌 = 绿
)])

3️⃣ pyecharts:爱国者必备国产包,颜值高,还能上大屏!

如果你是做量化报告或者要在公司里搞个展示,pyecharts真的适合你。国产出品,文档中文,全套Echarts功能打包奉上。配上Flask一跑,老板都得点赞。

来,贴个例子:

from pyecharts.charts import Kline
from pyecharts.options import TitleOpts, TooltipOpts
import pandas as pd

df = get_hq('000001.SZ',start_date='20240101',period='1d')

kline = Kline()
kline.add_xaxis(list(df['date']))
kline.add_yaxis("K线图", df[['open', 'close', 'low', 'high']].values.tolist())
kline.set_global_opts(title_opts=TitleOpts(title="股票K线图"), tooltip_opts=TooltipOpts(trigger="axis"))
kline.render("kline.html")

image.png 你没看错,顺序是 open、close、low、high。和其他包不一样,是的,挺魔性🤣。

但美是真美!不光能动,还能上大屏,动效拉满,适合场面活儿。

详细教程你可以参考花姐之前写的文章: 《用 Python 画 K 线图,做量化的朋友一定要掌握的技能》


4️⃣ finplot:量化圈的隐藏高手

我之前在逛外国论坛时才发现它,速度快到飞起,专门为金融数据优化的,特别适合画超大数据量的K线图。最骚的是,它能嵌入PyQt界面,用起来有点像专业交易软件。

安装:

pip install finplot

安装包的时候会自动安装pyQT等依赖

代码是这样的:

import finplot as fplt
import pandas as pd

df = get_hq('000001.SZ',start_date='20240101',period='1d')

fplt.candlestick_ochl(df[['open', 'close', 'high', 'low']])
fplt.show()

image.png


那么问题来了……该选哪个?

我来拍板:搞量化策略的话,mplfinance 是最合适的。

为啥?

✅ 稳定可靠 ✅ 数据结构友好(Pandas直接喂) ✅ 图清晰,能加均线、交易量、画标记 ✅ 没有太多学习成本,适合直接用

当然,如果你想搞炫酷的网页展示,plotly 、 pyecharts 更合适,搞windows界面,一定要用finplot。但搞策略——清爽简洁第一位。别被动效迷了眼。

如果你看到这儿,说明你真的是个有心的读者。那就顺手给我点个“在看”吧,不然我可就耍脾气不更新啦😂

我们下篇见👋

—— 花姐