# 怎樣在GUI窗口中繪制一個茅臺股票K線圖
## 前言
在金融數據分析領域,K線圖(Candlestick Chart)是展示股票價格走勢的重要工具。本文將詳細介紹如何使用Python的`matplotlib`和`mplfinance`庫,在GUI窗口中繪制貴州茅臺(600519.SH)的股票K線圖。我們將通過Tkinter創建圖形用戶界面,并實現數據獲取、圖表繪制和交互功能。
---
## 一、環境準備
### 1.1 安裝必要庫
```bash
pip install matplotlib mplfinance pandas yfinance tk
yfinance: 從Yahoo Finance獲取股票數據mplfinance: 專業金融圖表繪制庫tkinter: Python標準GUI工具包import yfinance as yf
# 獲取貴州茅臺2023年數據
maotai = yf.Ticker("600519.SS")
df = maotai.history(period="1y")
# 確保日期為datetime類型
df.index = pd.to_datetime(df.index)
# 保留必要列
df = df[['Open', 'High', 'Low', 'Close', 'Volume']]
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
root = tk.Tk()
root.title("茅臺股票K線圖分析")
root.geometry("1000x800")
control_frame = tk.Frame(root)
control_frame.pack(side=tk.TOP, fill=tk.X)
# 添加時間范圍選擇
tk.Label(control_frame, text="時間范圍:").pack(side=tk.LEFT)
periods = ["1月", "3月", "6月", "1年", "全部"]
period_var = tk.StringVar(value="1年")
tk.OptionMenu(control_frame, period_var, *periods).pack(side=tk.LEFT)
import mplfinance as mpf
fig, axes = mpf.plot(
df,
type='candle',
style='charles',
title='貴州茅臺(600519.SH)',
ylabel='價格(元)',
volume=True,
returnfig=True
)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
def refresh_chart():
period_map = {
"1月": "1mo",
"3月": "3mo",
"6月": "6mo",
"1年": "1y",
"全部": "max"
}
new_df = maotai.history(period=period_map[period_var.get()])
# 更新繪圖...
def add_ma():
mpf.plot(df, type='candle', mav=(5,10,20), style='charles')
import tkinter as tk
import yfinance as yf
import mplfinance as mpf
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
class StockApp:
def __init__(self, master):
self.master = master
self.setup_ui()
self.load_data()
def setup_ui(self):
# 控制面板
control_frame = tk.Frame(self.master)
control_frame.pack(side=tk.TOP, fill=tk.X)
# 時間范圍選擇
tk.Label(control_frame, text="時間范圍:").pack(side=tk.LEFT)
self.period_var = tk.StringVar(value="1年")
periods = ["1月", "3月", "6月", "1年", "全部"]
tk.OptionMenu(control_frame, self.period_var, *periods,
command=self.refresh_chart).pack(side=tk.LEFT)
# 技術指標按鈕
tk.Button(control_frame, text="添加均線",
command=self.add_ma).pack(side=tk.LEFT)
def load_data(self):
self.maotai = yf.Ticker("600519.SS")
self.refresh_chart()
def refresh_chart(self, *args):
period_map = {"1月":"1mo", "3月":"3mo", "6月":"6mo", "1年":"1y", "全部":"max"}
df = self.maotai.history(period=period_map[self.period_var.get()])
fig, _ = mpf.plot(
df,
type='candle',
style='charles',
title=f'貴州茅臺(600519.SH) - {self.period_var.get()}',
ylabel='價格(元)',
volume=True,
returnfig=True
)
if hasattr(self, 'canvas'):
self.canvas.get_tk_widget().destroy()
self.canvas = FigureCanvasTkAgg(fig, master=self.master)
self.canvas.draw()
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
if __name__ == "__main__":
root = tk.Tk()
app = StockApp(root)
root.mainloop()
添加更多技術指標:
talib庫計算專業指標交互增強:
樣式美化:
seaborn風格本文詳細演示了如何在Python GUI中創建專業的茅臺股票K線圖。通過組合yfinance、mplfinance和tkinter,我們可以構建功能完善的金融分析工具。讀者可以在此基礎上擴展更多功能,如添加交易策略回測、實時數據更新等高級特性。
“`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。