Python使用Tushare获取日线数据

Tushare

1. 注册Tushare

2. 由于Tushare根据积分获得相应数据接口权限, 注册后获取100积分,可通过修改个人资料获20积分,即可获取日线行情数据。

登录Tushare后,拷贝对应的TOKEN

Python获取日线数据

Python安装tushare

pip3 install tushare

使用Tushare获取日线行情  

import tushare as ts 

ts.set_token('input your token here')
pro = ts.pro_api()
df = pro.daily(ts_code='000001.SZ', start_date='20240101', end_date='20240531')

print(df)

运行结果如下

      ts_code trade_date   open   high    low  close  pre_close  change  pct_chg         vol       amount
0   000001.SZ   20240531  11.14  11.19  11.11  11.11      11.12   -0.01  -0.0899   826706.76   921248.146
1   000001.SZ   20240530  11.24  11.34  11.06  11.12      11.26   -0.14  -1.2433  1325496.35  1481608.711   
2   000001.SZ   20240529  11.38  11.45  11.23  11.26      11.40   -0.14  -1.2281  1444811.11  1635445.613   
3   000001.SZ   20240528  11.50  11.58  11.36  11.40      11.51   -0.11  -0.9557  1204322.85  1377107.204   
4   000001.SZ   20240527  11.31  11.53  11.31  11.51      11.31    0.20   1.7683  1454361.43  1663272.118   
..        ...        ...    ...    ...    ...    ...        ...     ...      ...         ...          ...   
93  000001.SZ   20240108   9.23   9.30   9.11   9.15       9.27   -0.12  -1.2945  1121156.19  1029006.549   
94  000001.SZ   20240105   9.10   9.44   9.07   9.27       9.11    0.16   1.7563  1991622.16  1852659.692   
95  000001.SZ   20240104   9.19   9.19   9.08   9.11       9.20   -0.09  -0.9783   864193.99   787470.082   
96  000001.SZ   20240103   9.19   9.22   9.15   9.20       9.21   -0.01  -0.1086   733610.31   673673.614   
97  000001.SZ   20240102   9.39   9.42   9.21   9.21       9.39   -0.18  -1.9169  1158366.45  1075742.252   

[98 rows x 11 columns]

import tkinter as tk #import numpy as np #from logging import root import pandas as pd from tkinter import messagebox import tushare as ts import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import mplfinance as mpf # 初始化Tushare pro_api pro = ts.pro_api('8dca39c0ade70178ef783dfb30f27c2428fcd88e3b90e652c3743091') # 请替换为你的Tushare token def get_and_plot_data(): entry=tk.Entry(root) entry.pack() ts_code = entry.get() if not ts_code: messagebox.showwarning("警告", "请输入有效的ts_code") return try: # 获取股票数据 df = pro.daily(ts_code=ts_code, start_date='20080101', end_date='20250317') if df.empty: messagebox.showwarning("警告", "未获取到该股票的数据") return # 转换期格式并设置为索引 df['trade_date'] = pd.to_datetime(df['trade_date']) df.set_index('trade_date', inplace=True) # 重命名列以适应mplfinance的要求 df.rename(columns={'open': 'Open', 'high': 'High', 'low': 'Low', 'close': 'Close'}, inplace=True) #用matplotlib作图(df中取两列),mplfinance # 创建一个matplotlib的Figure对象 fig, ax = plt.subplots(figsize=(12, 6)) # 增加宽度 # 使用mplfinance绘制K线图 ap = [mpf.make_addplot(df['vol'], panel=1, color='g', secondary_y=True)] # 添加成交量图 mpf.plot(df, type='candle', style='yahoo', ax=ax, volume=True, addplot=ap, show_nontrading=True) # 设置标题 ax.set_title(f'K线图 for {ts_code}') # 将图表嵌入到tkinter窗口中 canvas = FigureCanvasTkAgg(fig, master=root) canvas.draw() canvas.get_tk_widget().grid(row=2, column=0, columnspan=2) except Exception as e: messagebox.showerror("错误", f"获取或绘制数据时出错: {str(e)}") root = tk.Tk() root.title("股票数据可视化") # 标签和输入框 label = tk.Label(root, text="请输入ts_code:") label.grid(row=0, column=0) entry = tk.Entry(root) entry.grid(row=0, column=1) # 按钮 button = tk.Button(root, text="查询并绘图", command=get_and_plot_data) button.grid(row=1, column=0, columnspan=2) # 启动主循环 root.mainloop()
最新发布
04-01
<think>嗯,用户给了一段Python代码,是关于用Tkinter和Tushare做股票数据可视化的。我需要先仔细看看这段代码有什么问题,或者用户想了解什么。用户可能想让我解释这段代码的功能,或者指出其中的错误。 首先,代码的大致结构是导入各种库,包括tkinter、pandas、tushare、matplotlib等。然后初始化Tushare的pro_api,定义了一个get_and_plot_data函数,里面获取用户输入的股票代码,获取数据,处理数据,然后用mplfinance画K线图和成交量。最后创建了Tkinter的界面,有输入框和按钮。 不过,看起来代码里有些地方可能有问题。比如,在get_and_plot_data函数里,一开始就创建了一个entry并pack,这可能是错误的,因为用户界面里的输入框已经在后面grid布局了。这会导致每次点击按钮时都新建一个输入框,覆盖原来的,或者布局混乱。用户可能没意识到这个问题。 另外,导入模块的部分,numpy被注释掉了,可能不需要。还有from logging import root也被注释,可能无关。代码里处理数据的时候,转换期格式,设置索引,重命名列,这些都是为了适配mplfinance的要求。但要注意是否列名正确,比如vol对应成交量,可能需要确认Tushare返回的数据中列名是否是'vol',或者是否有大小写问题。 在绘图部分,使用了mpf.plot,但参数是否正确?比如show_nontrading可能在股票数据中不需要,因为股票数据是按交易来的,不会有非交易数据。另外,创建FigureCanvasTkAgg之后,用了grid布局,但是之前的标签和输入框也是用grid,行号是否正确?这里可能row=2,而之前的按钮在row=1,所以没问题。 另外,异常处理是否周全?比如网络问题导致无法获取数据,或者输入的ts_code格式错误(比如没有.SH或.SZ后缀),Tushare可能会返回错误,这里是否能捕捉到? 还有,Tushare的token是用户自己的,用户需要替换成自己的,但代码中的token可能已经过期或者无效,这会影响数据获取。 然后,关于用户的问题,他们可能想知道这段代码的作用,或者为什么运行不起来,或者如何改进。根据用户的请求,可能需要解释代码的功能,指出潜在的问题,并给出改进建议。 另外,代码中matplotlib的FigureCanvasTkAgg使用grid布局,但Tkinter的主窗口默认是grid还是pack?这里可能没问题,因为之前用了grid,所以统一使用grid是对的。但要注意是否在同一个父容器里。 总结一下,这段代码的主要功能是通过Tkinter构建GUI,输入股票代码,调用Tushare获取历史数据,然后用mplfinance绘制K线图和成交量。但存在几个问题:重复创建输入框,可能的列名问题,布局问题,以及异常处理的完善性。 需要指出这些问题,并给出修正建议。比如,删除函数内重复创建的entry,确保列名正确,检查ts_code的格式,处理网络异常,以及布局调整等。此外,可能需要提醒用户替换有效的Tushare token,并安装必要的库。</think>以下是对这段股票数据可视化代码的逐步解析和改进建议: 一、代码功能概述 1. 这是一个使用Tkinter构建的GUI股票数据查询工具 2. 核心功能: - 通过Tushare API获取股票线数据 - 使用mplfinance绘制专业K线图 - 集成Matplotlib图表到Tkinter界面 - 包含成交量副图指标 二、关键代码段解析 1. 界面搭建部分 ```python root = tk.Tk() root.title("股票数据可视化") # 使用grid布局管理组件 label.grid(row=0, column=0) entry.grid(row=0, column=1) button.grid(row=1, column=0, columnspan=2) ``` 2. 数据获取逻辑 ```python df = pro.daily(ts_code=ts_code, start_date='20080101', end_date='20250317') # 注意:实际使用时结束期不应超过当前期 ``` 3. 数据处理关键步骤 ```python df['trade_date'] = pd.to_datetime(df['trade_date']) # 转换为期类型 df.set_index('trade_date', inplace=True) # 设为索引 df.rename(columns={ 'open': 'Open', 'high': 'High', 'low': 'Low', 'close': 'Close' }, inplace=True) # 标准化列名 ``` 三、存在的主要问题及改进建议 1. 输入框重复创建问题 - 原代码在函数内重复创建Entry组件 - 修正建议:删除`get_and_plot_data()`函数内的`entry=tk.Entry(root)`和`entry.pack()` 2. 期范围问题 ```python # 原代码设置end_date='20250317'(未来期) end_date = pd.datetime.now().strftime('%Y%m%d') # 应使用当前期 ``` 3. 股票代码格式验证 ```python if not ts_code.endswith(('.SH', '.SZ')): messagebox.showwarning("警告", "代码格式应为:000001.SH/399001.SZ") return ``` 4. 图表布局优化 ```python # 原代码使用grid(row=2,...)需确保布局层级正确 canvas.get_tk_widget().grid(row=3, column=0, columnspan=2, sticky='nsew') # 增加sticky参数 ``` 四、完整改进建议代码 ```python # 在import区增加 from datetime import datetime # 修改后的获取数据函数 def get_and_plot_data(): ts_code = entry.get().strip() # 验证输入格式 if not ts_code.endswith(('.SH', '.SZ')): messagebox.showwarning("警告", "请输入完整股票代码,如:000001.SH") return try: # 获取当前期作为结束期 end_date = datetime.now().strftime("%Y%m%d") # 获取数据(增加try-except嵌套) df = pro.daily( ts_code=ts_code, start_date='20180101', end_date=end_date ) # 异常处理增加网络错误判断 if 'code' in df and df['code'] == 404: messagebox.showerror("错误", "API请求失败,请检查网络") return # ...保持原有处理逻辑... except Exception as e: messagebox.showerror("错误", f"发生异常: {str(e)}") ``` 五、运行环境准备提醒 1. 需要安装必要库: ```bash pip install tkinter pandas tushare matplotlib mplfinance ``` 2. 需要申请有效的Tushare token(官网注册后获取) 六、扩展功能建议 1. 增加时间范围选择控件 2. 添加技术指标(MACD/KDJ)选项 3. 实现图表动态更新 4. 添加数据导出功能 该代码实现了基本的股票数据可视化功能,通过修正输入处理和期逻辑后,可以作为量化分析的基础框架。建议运行时注意网络连接状态,并确保使用有效的API token。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值