Python中如何绘制股票的K线图

企业微信

安装与导入库

绘制K线图离不开强大的第三方库,mplfinance是专为金融数据可视化设计的库,它基于matplotlib构建,提供了简洁的API。安装过程非常简单,通过pip命令即可完成:


pip install mplfinance

导入库时,通常还需要pandas来处理数据,numpy用于数值计算,matplotlib用于自定义调整。

Python中如何绘制股票的K线图


import pandas as pd

import numpy as np

import mplfinance as mpf

import matplotlib.pyplot as plt

数据准备

K线图的数据结构要求包含日期(DatetimeIndex)、开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)以及成交量(Volume)。数据可以从Yahoo Finance、东方财富等数据源获取,或者使用本地CSV文件。

下面是一个示例,演示如何从Yahoo Finance下载数据并转换为mplfinance所需的格式:


import yfinance as yf

# 下载股票数据

df = yf.download('AAPL', start='2023-01-01', end='2023-06-30')

# 重命名列以满足mplfinance要求

df.columns = ['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume']

# 确保索引为DatetimeIndex

df.index = pd.to_datetime(df.index)

# 检查数据

df.head()

若使用本地数据,确保CSV文件包含上述列,并使用pd.read_csv读取,然后设置日期列为索引。

绘制基础K线图

使用mplfinance的plot函数可以快速生成K线图。最基本的调用方式如下:


mpf.plot(df, type='candle', volume=True, title='AAPL Stock Price')

type='candle'指定绘制蜡烛图(即K线图),volume=True在下方添加成交量子图。这样就能得到一张带有成交量的K线图。

为了更好的显示效果,可以调整图形尺寸:


mpf.plot(df, type='candle', volume=True, figsize=(10, 6), title='AAPL Stock Price')

添加移动平均线

技术分析中常用移动平均线来识别趋势。mplfinance允许通过mav参数添加多条移动平均线。


mpf.plot(df, type='candle', volume=True, mav=(5, 10, 20), title='AAPL with MA')

这里的mav接受一个元组,分别计算5日、10日、20日移动平均线,并在图中以不同颜色显示。

自定义图表样式

mplfinance提供了多种预设样式,例如'charles''nightclouds''yahoo'等,可以通过style参数指定。


mpf.plot(df, type='candle', volume=True, style='charles', title='AAPL Custom Style')

还可以自定义颜色,例如将阳线(收盘价高于开盘价)设为红色,阴线设为绿色(国内习惯),需要创建自定义样式:


custom_style = mpf.make_marketcolors(up='red', down='green', edge='inherit', wick='inherit', volume='inherit')

mpf_style = mpf.make_mpf_style(marketcolors=custom_style)

mpf.plot(df, type='candle', volume=True, style=mpf_style, title='AAPL Custom Colors')

添加更多技术指标

mplfinance支持通过addplot函数添加自定义指标,例如布林带、MACD等。先计算指标,然后将其添加到一条或多条线段中。

以布林带为例:


# 计算简单移动平均和标准差

ma20 = df['Close'].rolling(20).mean()

std20 = df['Close'].rolling(20).std()

# 上轨和下轨

upper = ma20 + 2 * std20

lower = ma20 - 2 * std20

# 创建addplot对象

ap = [

    mpf.make_addplot(upper, color='blue'),

    mpf.make_addplot(lower, color='blue'),

]

# 绘制

mpf.plot(df, type='candle', addplot=ap, volume=True, title='AAPL with Bollinger Bands')

对于MACD指标,需要计算DIF、DEA和MACD柱,然后以不同方式显示。

处理非交易日期

股票数据中可能包含非交易日(如周末、节假日),这些日期在图表中会导致断开。mplfinance提供了show_nontrading参数来控制是否显示非交易日。


mpf.plot(df, type='candle', show_nontrading=False)

设置为False时,图表会跳过非交易日,使走势连续。

交互式图表

mplfinance本身不直接支持交互,但可以结合plotly实现。plotlycandlestick图表提供缩放的交互功能。


import plotly.graph_objects as go

fig = go.Figure(data=[go.Candlestick(x=df.index,

                open=df['Open'], high=df['High'],

                low=df['Low'], close=df['Close'])])

fig.update_layout(title='AAPL Interactive Candlestick Chart')

fig.show()

这种方式适合在Web端展示。

保存图表

使用mpf.plot时可以通过savefig参数保存图表为图片文件:


mpf.plot(df, type='candle', volume=True, savefig='aapl.png')

对于plotly,使用fig.write_image()保存。

常见问题及解决

在绘制过程中可能会遇到一些常见问题。若数据包含NaN值,可能导致绘图失败,先删除或填充。日期索引必须为DatetimeIndex,否则报错。若成交量列不存在,设置volume=False


# 处理NaN

df = df.dropna()

利用Python结合mplfinance库,可以高效地绘制出专业且美观的股票K线图,并且能够轻松集成各种技术指标,为量化分析和交易决策提供有力的视觉支持。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/K-xiantu-Python-huizhi-184.html