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

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

用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 ts

pro = 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.kler.cn/a/355063.html

相关文章:

  • SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法
  • Java 中反射的高级用法:窥探 Java 世界的魔法之门
  • 重温设计模式-外观模式和适配器模式的异同
  • ROSboard:为您的机器人提供强大的Web可视化工具
  • 今日总结 2024-12-24
  • 微调大模型时,如何进行数据预处理? 将<input, output>转换为模型所需的<input_ids, labels, attention_mask>
  • Autosar软件组件概述
  • 数字图像处理:图像复原应用
  • java 调用 k8s 的 apiserver
  • 公开选拔!产业实践教授
  • RHCE--at,crontab例行性工作
  • 滚雪球学Redis[5.3讲]:Redis持久化优化深度解析:RDB与AOF的策略选择与实践
  • Unity3D 框架如何实现道路引导 UV 动画详解
  • 如何优化API以提高数据获取的准确性?
  • 从MySQL到OceanBase离线数据迁移的实践
  • 鸿蒙跨设备协同开发06——应用接续
  • SpringCloud Gateway 网关路由全自动实现方案
  • MongoDB未授权访问
  • 《Spring Boot 应用开发研究》
  • 【OSCP Proving Grounds 靶场系列】Slort
  • oracle查询数据库占用大小
  • VTK的学习方法-第一类型应用
  • 后端——eclipse实现前端后端的交互(1)
  • SpringCloud学习记录|day5
  • 常用的字符集(ASCII、GBK)
  • 速卖通关键字搜索接口技术解析及Python代码示例