第 2 章 · 04 mplfinance 一行画 K 线(对应 QS021) 速查摘要: (matplotlib finance)是封装在 matplotlib 之上的金融画图库,一行 就能画出专业的 K 线图(蜡烛图)、OHLC 图、Renko 砖形图、折线图,还能叠加均线( )、成交量( )。本节是第 2 章里依赖最少、最容易跑的脚本——只需 + 两个库,不依赖 OpenBB,几行代码就能产出可发表的金融图表。 涉及脚本:原项目 QS021-mplfinance/01mplfinance.
速查摘要:
mplfinance(matplotlib finance)是封装在 matplotlib 之上的金融画图库,一行mpf.plot(data, type="candle")就能画出专业的 K 线图(蜡烛图)、OHLC 图、Renko 砖形图、折线图,还能叠加均线(mav)、成交量(volume)。本节是第 2 章里依赖最少、最容易跑的脚本——只需yfinance+mplfinance两个库,不依赖 OpenBB,几行代码就能产出可发表的金融图表。
涉及脚本:原项目 QS021-mplfinance/01_mplfinance.py(约 41 行 Python,是第 2 章最短的脚本)
⚠️ 注意:
mplfinance要求传入的 DataFrame 必须有Open/High/Low/Close/Volume列(首字母大写),且索引必须是 DatetimeIndex(不能是普通数字索引或字符串日期)。yfinance.download()的返回恰好满足这两点,所以两者搭配最省事;如果用其他数据源,要先df.index = pd.to_datetime(df.index)把索引转成日期时间类型,否则mpf.plot会报错。
mpf.plot 的 type 参数决定画法:
1. candle(蜡烛图/K 线图,默认)——最经典的金融图表。每根 K 线由"实体 + 影线"组成:实体矩形连接开盘价和收盘价,涨(收>开)通常空心/绿色,跌(收<开)实心/红色;上下影线伸出当日最高最低价。一根 K 线同时表达 OHLC 四个量,信息密度高,是技术分析的通用语言。
2. ohlc(开高低收柱)——用一根竖线(高到低)+ 左右小横线(左开右收)表示。信息与 candle 相同,但更紧凑,适合长周期或快速浏览。
3. line(折线图)——只画收盘价连线。最简单,适合看长期趋势,丢失了 OHLC 细节。
4. renko(砖形图)——只看价格变动,不看时间。每块"砖"代表固定价格幅度(比如 2 元),价格涨够一个幅度画一块绿砖、跌够画一块红砖,没够就不画。 Renko 过滤了时间和小幅波动,专门突出趋势——这是它与其他三种"按时间排布"图表的本质区别,适合识别大趋势、过滤噪声。
mav=15:叠加 15 日均线。单条均线用整数。mav=(7,14,21):叠加三条均线,传元组。短期均线上穿长期均线是金叉,反之死叉(与 QS013 同理),多均线图就是看这些交叉。volume=True:在主图下方加一个成交量子图,与价格对齐。量价配合是技术分析的基本功——突破伴随放量更可信,无量上涨往往假突破。mplfinance 不是独立画图引擎,而是 matplotlib 的"金融封装"。它做了几件事:
show_nontrading=True 显式显示非交易日空隙。理解这层关系,就知道为什么 mplfinance 要求"索引是 DatetimeIndex"——它要在日期轴上排布图元。
整段脚本就是一系列 mpf.plot 调用,逐个演示不同参数组合。
data = yf.download("AAPL", start="2022-01-01", end="2022-06-30")
yf.download() 返回的 DataFrame 已经满足 mplfinance 要求:列是 Open/High/Low/Close/Volume(首字母大写),索引是 DatetimeIndex。半年数据约 120 个交易日,画 K 线密度刚好。
mpf.plot(data) # 默认 candle 蜡烛图 mpf.plot(data, type="candle") # 显式指定蜡烛图 mpf.plot(data, type="line") # 折线图(只画收盘) mpf.plot(data, type="renko") # 砖形图(只看价格变动,不看时间)
四种类型的对比要点:
type 时就是 candle,与显式 type="candle" 等价。line 丢失 OHLC 细节,但看长期趋势最清爽。renko 的特殊性:横轴不再是均匀的时间——价格不动不画砖,所以同一图里相邻砖块可能对应几天也可能对应几周。这种"只看价格"的视角是 Renko 过滤噪声的关键。mpf.plot(data, type="ohlc", mav=15)
mav=15 传整数表示一条 15 日均线,叠加在主图上。均线穿越价格是趋势信号。
mpf.plot(data, type="candle", mav=(7, 14, 21)) mpf.plot(data, type="candle", mav=(7, 14, 21), volume=True)
mav=(7,14,21) 传元组表示三条均线(7 日、14 日、21 日,典型的短中长组合),自动用不同颜色区分。看三条均线的排列(多头排列 = 短>中>长,空头排列反之)判断趋势。volume=True 在主图下方加成交量子图,与价格时间轴对齐。量价配合分析的标准配置——放量突破更可信,缩量上涨要警惕。mpf.plot(data, type="candle", mav=(7, 14, 21), volume=True, show_nontrading=True) intraday = yf.download(tickers="PLTR", period="5d", interval="1m") iday = intraday.iloc[-100:, :] mpf.plot(iday, type="candle", mav=(7, 12), volume=True)
两个新东西:
show_nontrading=True 显式画出非交易日(周末、节假日)的空隙。默认 mplfinance 会"压缩"掉这些空隙,让 K 线均匀排布;开了这个参数后,周末会出现明显的空隙。看跳空缺口时要开,看连续趋势时不开。interval="1m" 拉 1 分钟 K 线,period="5d" 取最近 5 个交易日。iloc[-100:, :] 只画最后 100 根(避免图太密)。日内图适合看当日盘口微观结构、短线交易决策。💡 核心心法:mplfinance 的参数组合就是"主图类型(type)+ 叠加(mav)+ 辅助(volume)+ 显示选项(show_nontrading)"四个维度拼起来。记住这四组参数,就能应付绝大多数金融画图需求,不用手写 matplotlib 几何元素。
技巧一:yf.download() 与 mpf.plot() 天作之合。yfinance 返回的 DataFrame 自带大写 OHLC 列 + DatetimeIndex,正好满足 mplfinance 的硬要求,两行代码画 K 线。用其他数据源时务必先 df.index = pd.to_datetime(df.index) 转索引。
技巧二:type 参数四选一——candle(默认,K 线)、ohlc(开高低收柱)、line(折线)、renko(砖形图,只看价格不看时间)。Renko 的特殊性值得记:过滤时间维度,专攻趋势。
技巧三:mav 整数 vs 元组——mav=15 单均线,mav=(7,14,21) 多均线(短中长组合)。多均线看排列判断趋势。
技巧四:volume=True 加量价配合。主图下方对齐成交量子图,放量/缩量配合价格突破是技术分析基本功。
技巧五:iloc[-100:, :] 切片控制画图密度。日内或高频数据全画太密,取末尾 N 根最实用。
💡 速查要点:mplfinance 是 matplotlib 之上的金融图封装,
mpf.plot(data, type=, mav=, volume=)四个参数应付绝大多数 K 线图需求。依赖最少(只需 yfinance + mplfinance),DataFrame 要求大写 OHLC 列 + DatetimeIndex 索引。renko 只看价格变动不看时间,是过滤噪声的利器。
mpf.plot(data, type="candle") 画专业 K 线,依赖最少最易跑(只需 yfinance + mplfinance)。type:candle(蜡烛图,默认)、ohlc(开高低收柱)、line(折线)、renko(砖形图,只看价格不看时间,专攻趋势)。mav 叠加均线:整数 mav=15 单均线,元组 mav=(7,14,21) 多均线;volume=True 加成交量子图,量价配合分析。Open/High/Low/Close/Volume,索引必须是 DatetimeIndex——yf.download() 的返回天然满足。show_nontrading=True 显示非交易日空隙(看跳空),日内高频数据用 iloc[-100:, :] 切片控制密度。