在本篇文章中,我们重点介绍了股市趋势分析的绘图过程。该过程由五个部分组成:初始配置、数据准备、图表大纲创建、主图渲染、绘制MACD指标和MACD振荡器直方图、图表标题、图例、刻度设置以及图表输出。
我们导入绘制图表所需的库和模块,并准备所需股票的数据。我们使用yahooquery
从雅虎财经获取股票价格数据,包括特定时期的开盘价、收盘价、最高价和最低价。这些数据点是图表创建的基本组成部分。
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)
show_count
)和x轴上的刻度标记数量(tick_count
)。yahooquery
下载腾讯的股票数据,时间段为2年。如何使用yahooquery获取股票数据,请参见[Python] Yahooquery:获取和管理过去股票和财务数据。设置图表的整体形状和大小。
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()
mpf.figure(figsize=(12,10))
确定整体图形大小,宽为12英寸,高为10英寸。此尺寸定义整个图形窗口。fig.add_subplot(5, 1, (1, 3), facecolor='white')
将整个图形垂直分为5部分,水平分为1部分,并将前3个垂直部分分配给主图。')`将第四个垂直部分分配给MACD图。
fig.add_subplot(5, 1, (5, 5), facecolor='white')
将最后一个垂直部分分配给MACD振荡器图。fig.tight_layout()
调整子图之间的间距,确保图形均匀排列,布局美观。蜡烛图作为分析股市趋势的重要工具,以图形的方式展示了开盘、收盘、最高和最低价格,而移动平均线则描绘了股票在特定时期的平均价格。借助TA-Lib库,能够简化此类分析的执行。
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('')
mpf.make_addplot
函数绘制5日、20日和60日移动平均线图,其中ax=ax_main
表示在主图上绘制移动平均线。mpf.make_marketcolors
函数设置蜡烛图上升和下降趋势的颜色。在此实例中,红色(#BE452D
)代表上升,蓝色(#4375E0
)代表下降。mpf.make_mpf_style
函数配置整体图表的美学效果,指定市场颜色、网格颜色和网格样式。mpf.plot
函数用于渲染蜡烛图以及之前设置的移动平均线。在此,addplot
参数添加移动平均线图,并由datetime_format
确定日期格式。ax_main.set_ylabel('')
用于移除Y轴标签。该代码演示了使用mplfinance库绘制腾讯股票蜡烛图和移动平均线的过程。这个库的优势在于轻松绘制蜡烛图和移动平均线,并利用内置样式。
在[Python] 使用mplfinance绘制K线图上有关于如何使用mplfinance库绘制蜡烛图的详细说明。
MACD指标代表两个移动平均线之间的差异,这种差异在判断趋势的强度和方向上起到关键作用。MACD振荡器直方图以条形图的形式视觉化地协助分析这一差异。
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")
#DE0000
)显示。ax_macd.plot
函数用于呈现MACD值和MACD信号值的线图。ax_hist.bar
函数绘制MACD直方图,确定正值和负值,并分别用红色(#EC3019
)和蓝色(#4375E0
)标记。strftime('%Y-%m-%d')
函数将日期索引转换为相应的字符串格式。
在本部分中,执行图表完成所需的最后步骤。添加标题以阐明图表的主题,并利用图例来阐释图表的每个部分。刻度设置指定了轴的单位,并在完成所有设置后呈现图表。
# 为每个图表设置标题
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()
ax_main.set_title
、ax_macd.set_title
、ax_hist.set_title
配置每个图表的标题,并传递标题字符串和字体大小作为参数。mplfinance
绘制的图表不直接允许图例,因此使用多步程序来追加图例。首先通过ax_main.legend([None]*(len(added_plots)+2))
创建空图例,然后用handles
获取实际图例句柄来设置图例。tick_count
变量计算并设置要在x轴上显示的刻度标记数量。每个刻度标记的位置基于总数据长度和刻度标记计数均匀分布。plt.show()
在屏幕上呈现图表。由于mplfinance库内的特定行为,主图表的图例配置需要复杂的步骤。准确地理解和实施这一部分至关重要。
yahooquery
获取数据的过程复杂吗?yahooquery
极大地简化了从雅虎财经获取数据的任务。它允许轻松获取指定时期的特定股票数据,无需复杂配置即可立即使用所需数据。详细信息请参阅[Python] Yahooquery:获取和管理过去股票和财务数据。yahooquery
和TA-Lib等库可以大大简化复杂的计算和可视化,因此不需要复杂的数学知识。关于特定库和模块的详细信息可以参考上述链接。[Python] 通过多种示例深入了解位运算符 |
---|
[Python] 通过多种示例深入了解关系运算符 |
[Python] 解决 'zsh: command not found: python' 错误的方法 |
[Python] 通过多种示例深入了解赋值运算符 |
[Python] 通过多种示例深入了解算术运算符 |
CloneCoding
创新从一行代码开始!