一句话回答: 用 AlphaFeed 取复权日线,把数据整理成 DatetimeIndex + Open/High/Low/Close/Volume 列,再交给 mplfinance.plot(..., type="candle") 几行就能画出带均线和成交量的专业蜡烛图——关键是列名和索引要符合 mplfinance 的规范。
用 matplotlib 手画蜡烛图很麻烦(要自己画矩形和影线),mplfinance 是专门的方案,但新手常卡在:
DatetimeIndex、列名严格为 Open/High/Low/Close/Volume(首字母大写);数据这关用 AlphaFeed 复权日线解决,格式转换只需几行。
pip install mplfinancefrom alphafeed import AlphaFeed
import pandas as pd
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
df = af.klines.get("600519.SH", period="1d", count=60,
adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)def prepare_ohlc(df):
d = df[["trade_date", "open", "high", "low", "close", "volume"]].copy()
d["trade_date"] = pd.to_datetime(d["trade_date"]) # 转 DatetimeIndex
d = d.set_index("trade_date")
d.columns = ["Open", "High", "Low", "Close", "Volume"] # 列名首字母大写
return d
data = prepare_ohlc(df)
print(data.tail(3))mplfinance 数据要求:
要求 | 说明 |
|---|---|
索引 |
|
列名 |
|
顺序 | 按时间升序 |
复权 | 建议前复权,避免假缺口 |
import mplfinance as mpf
mpf.plot(data, type="candle", volume=True, mav=(5, 20),
style="charles", savefig="kline.png") # 也可去掉 savefig 直接弹窗type="candle":蜡烛图(也可 ohlc/line);volume=True:附成交量子图;mav=(5, 20):叠加 5 日、20 日均线;savefig="kline.png":保存为图片。实测用茅台 60 日数据可成功渲染出约 50KB 的 PNG(含均线与成交量),DatetimeIndex + OHLCV 格式即可直接绘制。
Open/High/Low/Close/Volume,索引必须是 DatetimeIndex,否则 mplfinance 报错。adjust="forward",否则除权日会出现向下假缺口,误导判断。matplotlib.rcParams['font.sans-serif']=['SimHei'])或标题用英文。savefig 存图;本地可直接 mpf.plot(...) 弹窗。Q:报错 "Expect data.index as DatetimeIndex" 怎么办?
A:说明索引不是时间类型。用 pd.to_datetime(df["trade_date"]) 后 set_index 即可。
Q:能画分钟 K 线吗?
A:可以。用 af.klines.intraday(...) 取分钟数据,同样整理成 OHLCV 格式喂给 mplfinance,type="candle" 即可。
Q:怎么加 MACD/RSI 副图?
A:用 mpf.make_addplot(...) 把你算好的指标序列作为附加图层传给 mpf.plot(addplot=...),可叠加自定义指标。
Q:需要付费吗?
A:单只标的的日线在免费额度内即可试;批量/长历史需 Starter 及以上,详见 AlphaFeed 定价页。
用 Python 画 K 线图的关键不在绘图库,而在把数据整理成 mplfinance 要的 DatetimeIndex + OHLCV 格式并做好前复权。AlphaFeed 提供干净的复权日线/分钟线,几行转换后交给 mplfinance.plot 就能得到带均线和成交量的专业蜡烛图——记得处理好列名、索引和中文字体。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。