怎样在GUI窗口中绘制一个茅台股票K线图

发布时间:2021-12-09 10:52:16 作者:柒染
来源:亿速云 阅读:427
# 怎样在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 库功能说明


二、获取茅台股票数据

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线图。通过组合yfinancemplfinancetkinter,我们可以构建功能完善的金融分析工具。读者可以在此基础上扩展更多功能,如添加交易策略回测、实时数据更新等高级特性。 “`

推荐阅读:
  1. Python如何绘制股票移动均线
  2. 如何使用Python画股票的K线图

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

gui

上一篇:HDFS怎么操作

下一篇:HDFS API如何实现Helloworld

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》