溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣在GUI窗口中繪制一個茅臺股票K線圖

發布時間:2021-12-09 10:52:16 來源:億速云 閱讀:462 作者:柒染 欄目:大數據
# 怎樣在GUI窗口中繪制一個茅臺股票K線圖

## 前言

在金融數據分析領域,K線圖(Candlestick Chart)是展示股票價格走勢的重要工具。本文將詳細介紹如何使用Python的`matplotlib`和`mplfinance`庫,在GUI窗口中繪制貴州茅臺(600519.SH)的股票K線圖。我們將通過Tkinter創建圖形用戶界面,并實現數據獲取、圖表繪制和交互功能。

---

## 一、環境準備

### 1.1 安裝必要庫
```bash
pip install matplotlib mplfinance pandas yfinance tk

1.2 庫功能說明

  • yfinance: 從Yahoo Finance獲取股票數據
  • mplfinance: 專業金融圖表繪制庫
  • tkinter: Python標準GUI工具包

二、獲取茅臺股票數據

2.1 通過yfinance獲取數據

import yfinance as yf

# 獲取貴州茅臺2023年數據
maotai = yf.Ticker("600519.SS")
df = maotai.history(period="1y")

2.2 數據預處理

# 確保日期為datetime類型
df.index = pd.to_datetime(df.index)

# 保留必要列
df = df[['Open', 'High', 'Low', 'Close', 'Volume']]

三、創建GUI窗口框架

3.1 基礎窗口設置

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

root = tk.Tk()
root.title("茅臺股票K線圖分析")
root.geometry("1000x800")

3.2 添加控制面板

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)

四、繪制K線圖

4.1 使用mplfinance繪圖

import mplfinance as mpf

fig, axes = mpf.plot(
    df,
    type='candle',
    style='charles',
    title='貴州茅臺(600519.SH)',
    ylabel='價格(元)',
    volume=True,
    returnfig=True
)

4.2 嵌入到Tkinter窗口

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

五、添加交互功能

5.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()])
    # 更新繪圖...

5.2 添加技術指標

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()

七、效果優化建議

  1. 添加更多技術指標

    • MACD、KDJ、BOLL等常用指標
    • 通過talib庫計算專業指標
  2. 交互增強

    • 添加鼠標懸停顯示價格功能
    • 支持圖表縮放和平移
  3. 樣式美化

    • 使用seaborn風格
    • 自定義顏色方案

結語

本文詳細演示了如何在Python GUI中創建專業的茅臺股票K線圖。通過組合yfinance、mplfinancetkinter,我們可以構建功能完善的金融分析工具。讀者可以在此基礎上擴展更多功能,如添加交易策略回測、實時數據更新等高級特性。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

gui
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女