[Python] 使用mplfinance和matplotlib绘制腾讯的MACD图表

在本篇文章中,我们重点介绍了股市趋势分析的绘图过程。该过程由五个部分组成:初始配置、数据准备、图表大纲创建、主图渲染、绘制MACD指标和MACD振荡器直方图、图表标题、图例、刻度设置以及图表输出。

初始配置和数据准备

我们导入绘制图表所需的库和模块,并准备所需股票的数据。我们使用yahooquery从雅虎财经获取股票价格数据,包括特定时期的开盘价、收盘价、最高价和最低价。这些数据点是图表创建的基本组成部分。

代码

python
from yahooquery import Ticker
import pandas as pd

# 要显示的数据数量
show_count = 250
# 要在x轴上显示的刻度数量
tick_count = 10

# 从yahooquery下载腾讯的股票数据
tencent = Ticker('0700.HK')
data = tencent.history(period="2y")
# 重置'symbol'和'date'的索引,并以'date'列设置新索引
data.reset_index(inplace=True)
data['date'] = pd.to_datetime(data['date'])
data.set_index('date', inplace=True)

# 使用talib库计算移动平均线
data["sma5"] = talib.SMA(data.close, timeperiod=5)  # 5天移动平均线
data["sma20"] = talib.SMA(data.close, timeperiod=20) # 20天移动平均线
data["sma60"] = talib.SMA(data.close, timeperiod=60) # 60天移动平均线

# 计算MACD
data["macd"], data["macd_signal"], data["macd_hist"] = talib.MACD(data['close'])

# 只使用最后250个数据
data = data.tail(show_count)

解释

  1. 数据配置:设置要显示的股票数据数量(show_count)和x轴上的刻度标记数量(tick_count)。
  2. 腾讯数据下载:使用yahooquery下载腾讯的股票数据,时间段为2年。如何使用yahooquery获取股票数据,请参见[Python] Yahooquery:获取和管理过去股票和财务数据
  3. 索引配置:从yahooquery下载的数据按'symbol'和'date'索引,因此必须重置,将'date'列转换为日期时间类型,并设置为绘图的新索引。
  4. 移动平均线计算:利用TA-Lib库计算5天、20天和60天的移动平均线。如何计算和使用移动平均线,请参阅[TA-Lib] #4:利用TA-Lib进行移动平均线分析 - 检测市场趋势并捕捉黄金交叉与死亡交叉
  5. MACD计算:计算MACD、MACD信号和MACD直方图。这些值用于分析股票的动量,有关如何计算和分析MACD的详细信息,请参见[TA-Lib] #6: 利用TA-Lib分析和计算MACD
  6. 数据筛选:只选择最近250个数据进行分析。此步强调了在给定时期内对最近趋势的分析。

创建图表大纲

设置图表的整体形状和大小。

代码

python
import matplotlib.pyplot as plt
import mplfinance as mpf

# 设置图的整体大小
fig = mpf.figure(figsize=(12,10))

# 创建主图、MACD图和MACD振荡器图的子图
ax_main = fig.add_subplot(5, 1, (1, 3), facecolor='white') # 主图
ax_macd = fig.add_subplot(5, 1, (4, 4), facecolor='white') # MACD图
ax_hist = fig.add_subplot(5, 1, (5, 5), facecolor='white') # MACD振荡器图

# 调整子图之间的间距
fig.tight_layout()

解释

  1. 设置整体图形大小:使用mpf.figure(figsize=(12,10))确定整体图形大小,宽为12英寸,高为10英寸。此尺寸定义整个图形窗口。
  2. 创建子图:子图定义整个图形窗口内各个图表的位置和大小。
    • 主图fig.add_subplot(5, 1, (1, 3), facecolor='white')将整个图形垂直分为5部分,水平分为1部分,并将前3个垂直部分分配给主图。
    • MACD图:`fig.add_subplot(5, 1, (4, 4), facecolor='white

')`将第四个垂直部分分配给MACD图。

  • MACD振荡器图fig.add_subplot(5, 1, (5, 5), facecolor='white')将最后一个垂直部分分配给MACD振荡器图。
  1. 间距调整:使用fig.tight_layout()调整子图之间的间距,确保图形均匀排列,布局美观。
主图、MACD和MACD振荡器的大纲,分别放置在不同区域
主图、MACD和MACD振荡器在不同区域的大纲。每个特定区域都配置为分析股票的各个方面。

创建主图表(蜡烛图和移动平均线)

蜡烛图作为分析股市趋势的重要工具,以图形的方式展示了开盘、收盘、最高和最低价格,而移动平均线则描绘了股票在特定时期的平均价格。借助TA-Lib库,能够简化此类分析的执行。

代码

python
added_plots = {
    'MA5': mpf.make_addplot(data.sma5, type='line', ax=ax_main, width=1.5),
    'MA20': mpf.make_addplot(data.sma20, type='line', ax=ax_main, width=1.5),
    'MA60': mpf.make_addplot(data.sma60, type='line', ax=ax_main, width=1.5),
}

mc = mpf.make_marketcolors(up="#BE452D", down="#4375E0", edge='black')

s = mpf.make_mpf_style(marketcolors=mc, gridcolor='#DDDDDD', gridstyle="--")

mpf.plot(data,
         style=s,
         type='candle',
         ax=ax_main,
         addplot=list(added_plots.values()),
         datetime_format='%Y-%m-%d',
         returnfig=True)

ax_main.set_ylabel('')

说明

  1. 设定移动平均线图: 使用mpf.make_addplot函数绘制5日、20日和60日移动平均线图,其中ax=ax_main表示在主图上绘制移动平均线。
  2. 配置市场颜色: mpf.make_marketcolors函数设置蜡烛图上升和下降趋势的颜色。在此实例中,红色(#BE452D)代表上升,蓝色(#4375E0)代表下降。
  3. 样式设置: mpf.make_mpf_style函数配置整体图表的美学效果,指定市场颜色、网格颜色和网格样式。
  4. 绘制蜡烛图: mpf.plot函数用于渲染蜡烛图以及之前设置的移动平均线。在此,addplot参数添加移动平均线图,并由datetime_format确定日期格式。
  5. Y轴标签配置: ax_main.set_ylabel('')用于移除Y轴标签。

该代码演示了使用mplfinance库绘制腾讯股票蜡烛图和移动平均线的过程。这个库的优势在于轻松绘制蜡烛图和移动平均线,并利用内置样式。

[Python] 使用mplfinance绘制K线图上有关于如何使用mplfinance库绘制蜡烛图的详细说明。


描绘MACD指标和MACD振荡器直方图

MACD指标代表两个移动平均线之间的差异,这种差异在判断趋势的强度和方向上起到关键作用。MACD振荡器直方图以条形图的形式视觉化地协助分析这一差异。

代码

python
ax_macd.plot([0, len(index)-1],
                 [0, 0],
                 color='#DE0000',
                 linestyle='--',
                 linewidth=0.7)

ax_macd.plot(data.index,
                data['macd'],
                label='MACD')

ax_macd.plot(data.index,
                data['macd_signal'],
                label='MACD Signal')

histogram = data['macd_hist']
index = data.index.strftime('%Y-%m-%d')
ax_hist.bar(list(index), list(histogram.where(histogram > 0)), 0.7, color="#EC3019")
ax_hist.bar(list(index), list(histogram.where(histogram < 0)), 0.7, color="#4375E0")

说明

  1. 绘制中心线: 在MACD图上绘制中心线。此线作为判断MACD值是正还是负的基线,以红色虚线(#DE0000)显示。
  2. 绘制MACD和MACD信号: ax_macd.plot函数用于呈现MACD值和MACD信号值的线图。
  3. 描绘MACD直方图: ax_hist.bar函数绘制MACD直方图,确定正值和负值,并分别用红色(#EC3019)和蓝色(#4375E0)标记。
  • 转换索引字符串: 在绘制条形图时将索引转换为字符串的主要原因是克服连续工作日处理问题,例如股票数据。通常情况下,将X轴传递为日期格式会将不存在的日期(例如周末)替换为零值。对于股市等仅在特定日期存在数据的场景,这种方法可能不合适。因此,通过将索引转换为'年-月-日'字符串,避免了日期的连续显示,防止了没有数据的日期的展现。strftime('%Y-%m-%d')函数将日期

索引转换为相应的字符串格式。

设置图表标题、图例、刻度,并渲染图表

在本部分中,执行图表完成所需的最后步骤。添加标题以阐明图表的主题,并利用图例来阐释图表的每个部分。刻度设置指定了轴的单位,并在完成所有设置后呈现图表。

代码

python
# 为每个图表设置标题
ax_main.set_title('腾讯', fontsize=15, fontdict={'family': 'Noto Sans SC')
ax_macd.set_title('MACD', fontsize=15)
ax_hist.set_title('MACD Signal', fontsize=15)

# 为主图表设置图例
font = font_manager.FontProperties(family='Noto Sans SC', weight='normal')
ax_main.legend([None]*(len(added_plots)+2))
handles = ax_main.get_legend().legend_handles
ax_main.legend(handles=handles[2:], labels=list(added_plots.keys()), prop=font)

# 为MACD图表设置图例
ax_macd.legend(loc=2, prop=font)

# 设置x轴刻度标记
step = (len(data) - 1) / (tick_count - 1)
ticks = [0 + int(step * i) for i in range(tick_count)]
ax_main.xaxis.set_ticks(ticks)
ax_macd.xaxis.set_ticks(ticks)
ax_hist.xaxis.set_ticks(ticks)
ax_main.xaxis.set_ticklabels([])
ax_macd.xaxis.set_ticklabels([])

# 配置网格
ax_main.grid(color='#dddddd', linestyle='--', linewidth=0.5)
ax_macd.grid(color='#dddddd', linestyle='--', linewidth=0.5)
ax_hist.grid(color='#dddddd', linestyle='--', linewidth=0.5)

# 显示图表
plt.show()

描述

  1. 设置图表标题: 通过ax_main.set_titleax_macd.set_titleax_hist.set_title配置每个图表的标题,并传递标题字符串和字体大小作为参数。
  2. 配置主图表的图例: 设定主图表的移动平均线图例。由于mplfinance绘制的图表不直接允许图例,因此使用多步程序来追加图例。首先通过ax_main.legend([None]*(len(added_plots)+2))创建空图例,然后用handles获取实际图例句柄来设置图例。
  3. 配置MACD图表的图例: 向MACD图表添加图例。可以指定位置和字体属性。
  4. 设置x轴刻度标记: 使用tick_count变量计算并设置要在x轴上显示的刻度标记数量。每个刻度标记的位置基于总数据长度和刻度标记计数均匀分布。
  5. 网格配置: 为每个图表定义网格的样式和颜色,增强图表的可读性。
  6. 显示图表: 通过调用plt.show()在屏幕上呈现图表。

由于mplfinance库内的特定行为,主图表的图例配置需要复杂的步骤。准确地理解和实施这一部分至关重要。


包含蜡烛图、移动平均线、MACD指标和MACD振荡器直方图的图表。
腾讯的蜡烛图、MACD、给定时期的MACD振荡器。该图表有助于分析股票价格趋势和交易信号。

FAQs

  1. 使用yahooquery获取数据的过程复杂吗?
  2. 如何使用TA-Lib绘制移动平均线?
  3. MACD指标为何重要,如何使用?
    • MACD指标是评估趋势强度和方向的关键工具。通过评估两个移动平均线之间的差异,它评估市场动能,并协助投资决策。使用TA-Lib,您可以轻松计算和分析MACD指标。全面分析方法请参见[TA-Lib] #6: 利用TA-Lib分析和计算MACD
  4. 图表的图例和刻度标记设置为何重要?
    • 图例和刻度标记在阅读和理解图表中起着重要作用。图例描述了各种线条和颜色代表什么,而刻度标记为图表的轴提供了精确的值和单位。这些元素增强了图表的可读性,并帮助用户更轻松、准确地从图表中识别关键信息。
  5. 进行此项目需要什么编程知识?
    • 为了进行此项目,您需要对Python编程和数据可视化有基本的了解。使用如yahooquery和TA-Lib等库可以大大简化复杂的计算和可视化,因此不需要复杂的数学知识。关于特定库和模块的详细信息可以参考上述链接。

© Copyright 2023 CLONE CODING