在本篇文章中,我們專注於股市趨勢分析的圖表繪製過程。此過程包括五個部分:初始配置、數據準備、圖表輪廓創建、主圖渲染、繪製MACD指標和MACD振蕩器直方圖、圖表標題、圖例、刻度設置和圖表輸出。
我們導入必要的庫和模塊以繪製圖表,並為所需的股票準備數據。我們使用yahooquery
從Yahoo Finance獲取股價數據,包括特定時期的開盤價、收盤價、最高價和最低價。這些數據點是圖表創建的重要組成部分。
from yahooquery import Ticker
import pandas as pd
# 要顯示的數據數量
show_count = 250
# 要在x軸上顯示的刻度數量
tick_count = 10
# 通過yahooquery下載台積電的股票數據
tsmc = Ticker('2330.TW')
data = tsmc.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個垂直部分分配給主圖。fig.add_subplot(5, 1, (4, 4), facecolor='white')
將第四個垂直部分分配給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庫繪製台積電股票的蠟燭圖和移動平均線的過程。這個庫具有輕鬆繪製蠟燭圖和移動平均線並利用內置風格的優勢。
有關如何使用mplfinance庫繪製蠟燭圖的詳細指南,請參見[Python] 使用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 TC'})
ax_macd.set_title('MACD', fontsize=15)
ax_hist.set_title('MACD Signal', fontsize=15)
# 為主圖表設置圖例
font = font_manager.FontProperties(family='Noto Sans TC', 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
大大簡化了從 Yahoo Finance 獲取數據的任務。它允許輕鬆獲取特定時期的特定股票數據,無需繁瑣的配置即可立即使用所需數據。詳細信息可在 [Python] Yahooquery:取得和管理過去股票和財務數據 上找到。yahooquery
和 TA-Lib 這樣的庫可以大大簡化複雜的計算和可視化,因此不需要繁瑣的數學知識。關於特定庫和模塊的詳細信息可以在上述鏈接中參考。[Python] 通過各種實例深入理解位元運算符 |
---|
[Python] 通過各種實例深入理解關係運算符 |
[Python] 解決 'zsh: command not found: python' 錯誤的方法 |
[Python] 通過各種實例深入理解賦值運算符 |
[Python] 通過各種實例深入理解算術運算符 |
CloneCoding
創新從一行代碼開始!