当前位置: 首页 > news >正文

一键获取每日股票数据,自动更新,尽在掌握

用Python和Tushare库获取股票日线数据

在金融市场分析中,获取股票的历史数据是进行技术分析和量化投资的基础。Tusharetushare官网是一个提供中国股市数据的API接口,它支持获取股票的日线数据、基本面数据等。本文将介绍如何使用Python语言和Tushare库来获取股票的日线数据,并结合多线程技术提高数据获取的效率。

1. 环境准备

首先,确保你的Python环境中安装了以下库:

  • tushare:用于获取股票数据的API接口。
  • pandas:用于数据处理和分析。
  • datetime:用于处理日期和时间。
  • os:用于操作系统功能,如文件路径操作。
  • multiprocessing:用于实现多线程。
  • time:用于处理时间相关的操作。

可以通过以下命令安装所需的库:

pip install tushare pandas
2. Tushare API的初始化

在使用Tushare之前,需要注册并获取API tokentushare官网。然后,使用以下代码初始化Tushare:

import tushare as tspro = ts.pro_api('your_token')
3. 获取股票列表

股票数据的获取通常是基于股票代码进行的。以下代码展示了如何获取当前上市的所有股票代码:

stock_list = list(pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')['ts_code']) + \list(pro.stock_basic(exchange='', list_status='D', fields='ts_code,symbol,name,area,industry,list_date')['ts_code']) + \list(pro.stock_basic(exchange='', list_status='P', fields='ts_code,symbol,name,area,industry,list_date')['ts_code'])
stock_list = list(filter(lambda x: x.startswith(('0', '6', '3')) and x.endswith(('SH', 'SZ')), stock_list))
4. 定义获取单只股票日线数据的函数

定义一个函数get_stock_daily_data_all,用于获取单只股票的日线数据。这个函数包括获取基础行情、复权因子、基本面因子、涨跌停价格和资金流向:

def get_stock_daily_data_all(stock_id, save_file_mode='feather'):df_daily = pd.DataFrame([])# 根据股票代码获取股票的交易所代码if len(stock_id) == 6:if stock_id.startswith(('6')):fund_code = f'{stock_id}.SH'elif stock_id.startswith('8'):fund_code = f'{stock_id}.BJ'else:fund_code = f'{stock_id}.SZ'else:fund_code = stock_id# 检查是否已经存在数据文件,如果不存在则获取数据if not os.path.exists(f'D:/stock_daily_data_tushare/{fund_code[:-3]}.feather'):try:for i in range(len(date_list) - 1):df_daily_temp = pro.daily(ts_code=f'{stock_id}', start_date=date_list[i], end_date=date_list[i + 1]).iloc[::-1]df_adj = pro.adj_factor(ts_code=f'{stock_id}', start_date=date_list[i], end_date=date_list[i + 1]).iloc[::-1]df_basic = pro.daily_basic(ts_code=f'{stock_id}', start_date=date_list[i], end_date=date_list[i + 1], fields='ts_code,trade_date,turnover_rate,turnover_rate_f,volume_ratio,pe,pe_ttm,pb,ps,ps_ttm,dv_ratio,dv_ttm,total_share,float_share,free_share,total_mv,circ_mv').iloc[::-1]df_limit = pro.stk_limit(ts_code=f'{stock_id}', start_date=date_list[i], end_date=date_list[i + 1]).iloc[::-1]df_moneyflow = pro.moneyflow(ts_code=f'{stock_id}', start_date=date_list[i], end_date=date_list[i + 1]).iloc[::-1]df_daily_temp['adj_factor'] = df_adj['adj_factor']df_daily_temp = pd.merge(df_daily_temp, df_limit, on=['ts_code', 'trade_date'], how='inner')df_daily_temp = pd.merge(df_daily_temp, df_basic, on=['ts_code', 'trade_date'], how='inner')df_daily_temp = pd.merge(df_daily_temp, df_moneyflow, on=['ts_code', 'trade_date'], how='inner')df_daily = pd.concat([df_daily, df_daily_temp])for item in ['open', 'high', 'low', 'close']:df_daily[f'{item}_after'] = df_daily[item] * df_daily['adj_factor']df_daily['ts_code'] = df_daily['ts_code'].apply(lambda x: x[:-3])df_daily = df_daily.rename(columns={'ts_code': 'code', 'trade_date': 'date', 'vol': 'volume'})df_daily.reset_index(drop=True, inplace=True)if save_file_mode == 'feather':df_daily.to_feather(f'D:/stock_daily_data_tushare/{fund_code[:-3]}.feather')elif save_file_mode == 'csv':df_daily.to_csv(f'./data/temp_data/{fund_code[:-3]}.csv')except Exception as e:time.sleep(60)print(e)print(f'{fund_code} error!')
5. 多线程获取数据

为了提高数据获取的效率,可以使用Python的multiprocessing库来实现多线程。以下代码展示了如何使用多线程获取所有股票的日线数据:

if __name__ == '__main__':pool = mp.Pool(processes=4)  # 创建一个进程池pool.map(get_stock_daily_data_all, stock_list)  # 映射函数到股票列表pool.close()pool.join()
6. 总结

本文介绍了如何使用Python和Tushare库获取股票的日线数据,包括基础行情、复权因子、基本面因子、涨跌停价格和资金流向。通过多线程技术,可以显著提高数据获取的效率。这些数据可以用于后续的数据分析和量化投资策略开发。

注意事项
  • 确保Tushare的API token是有效的。
  • 根据需要调整数据保存的格式和路径。
  • 考虑到API的调用频率限制,适当增加错误处理和重试逻辑。
需要完整代码可评论或私信

http://www.mrgr.cn/news/53227.html

相关文章:

  • 安全见闻笔记
  • [Gtk] 工程
  • OPENSSL-2023/11/10学习记录-C/C++对称分组加密DES
  • EPS导出DWG存在地物缺失或者没有编码属性的情况
  • float数据分别以int和float类型打印的反汇编分析
  • 【网络协议】之 HTTP 协议详解
  • 简单三步完成 Telegram 生态的 Web3 冷启动
  • 网络通信与并发编程(二)基于tcp的套接字、基于udp的套接字、粘包现象
  • Postman 接口测试
  • 去除视频水印的三种方法,有手就会
  • Vscode+Pycharm+Vue.js+WEUI+django火锅(7) 傍着Copliot战WEUI Picker
  • 1.1 C++语言基础面试问题
  • 试用cursor的简单的记录
  • 力扣困难题汇总
  • OQE-OPTICAL AND QUANTUM ELECTRONICS
  • 掌握高效工作汇报技巧:如何利用即时白板打造完美日报,提升职场影响力
  • C++简易日志系统:打造高效、线程安全的日志记录工具
  • D41【python 接口自动化学习】- python基础之函数
  • Linux系统下使用ncurses获取按键
  • GSM /3G/EPS/5G 的认证过程和算法、密钥