Python获取股票数据——以沪深300成分股为例

news2024/12/25 9:11:05

目录

  • 1、Baostock
  • 2、Tushare pro版
  • 3、AKshare
  • 4、聚宽量化平台

需求是下载比如从2020-01-01到2022-12-31区间的沪深300成分股每支股票的日K线数据,没错这是个面板数据,原本以为直接通过Python接口可以直接下载到,因为之前找的上证综指啥的用R的pedquant都是直接获取的(看来因为是单支)。
捣鼓了半天,还是我想的简单了……

试过Akshare、Tushare、Baostock以及聚宽量化平台下载,下面总结一下下载心得 o_0

1、Baostock

那就先说最后选用的这个开源的证券数据平台Baostock
链接附此 www.baostock.com
通过python API获取证券数据信息

# 豆瓣源下载包
pip install -i https://pypi.douban.com/simple baostock

首先获取沪深300成分股每支股票的code和code_name
日期这里就不做额外的要求了,默认更新到的哪天

import pandas as pd
import numpy as np
import baostock as bs

# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

# 获取沪深300成分股
rs = bs.query_hs300_stocks()
print('query_hs300 error_code:'+rs.error_code)
print('query_hs300  error_msg:'+rs.error_msg)

# 打印结果集
hs300_stocks = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    hs300_stocks.append(rs.get_row_data())
result = pd.DataFrame(hs300_stocks, columns=rs.fields)
# 结果集输出到csv文件
result.to_csv("D:/hs300_stocks.csv", encoding="gbk", index=False)
print(result)

# 登出系统
bs.logout()

获取到的300支股票名

login success!
login respond error_code:0
login respond  error_msg:success
query_hs300 error_code:0
query_hs300  error_msg:success
     updateDate       code code_name
0    2023-03-20  sh.600000      浦发银行
1    2023-03-20  sh.600009      上海机场
2    2023-03-20  sh.600010      包钢股份
3    2023-03-20  sh.600011      华能国际
4    2023-03-20  sh.600015      华夏银行
..          ...        ...       ...
295  2023-03-20  sz.300896       爱美客
296  2023-03-20  sz.300919      中伟股份
297  2023-03-20  sz.300957       贝泰妮
298  2023-03-20  sz.300979      华利集团
299  2023-03-20  sz.300999       金龙鱼

[300 rows x 3 columns]
logout success!

接着我们导入获取的股票名csv

hs=pd.read_csv('D:/hs300_stocks.csv',encoding='gbk')

通过循环300次code进行日K线数据获取

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
for i in range(300):
    rs = bs.query_history_k_data_plus(hs['code'][i],
    "date,code,open,high,low,close,preclose,volume,amount,turn,tradestatus,pctChg,isST",
    start_date='2021-01-01', end_date='2023-07-01',
    # 日K线,adjustflag="3"不复权
    frequency="d", adjustflag="3")
    print(f'query_history_k_data_plus respond error_code{i}:'+rs.error_code)
    print(f'query_history_k_data_plus respond  error_msg{i}:'+rs.error_msg)
    #### 打印结果集 ####
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    # to_csv中 mode='a'进行数据追加,去掉索引和表头
    result.to_csv("D:\hs300.csv",mode='a',index=False,header=False)
#### 登出系统 ####
bs.logout()

来看一下运行情况

login success!
login respond error_code:0
login respond  error_msg:success
query_history_k_data_plus respond error_code0:0
query_history_k_data_plus respond  error_msg0:success
query_history_k_data_plus respond error_code1:0
query_history_k_data_plus respond  error_msg1:success
query_history_k_data_plus respond error_code2:0
query_history_k_data_plus respond  error_msg2:success
......
query_history_k_data_plus respond error_code299:0
query_history_k_data_plus respond  error_msg299:success
logout success!

300支已就位,数据还是比较多的,除了常见的open、high、low、close等,还有turn换手率、tradestatus交易状态(1:正常交易 0:停牌)、pctChg涨跌幅、isST是否ST股(1是,0否)

在这里插入图片描述
想要其他指标还可以自己加,比如peTTM滚动市盈率、pbMRQ市净率等;
或者分钟线、周月线,通过frequency=" "修改,默认为d,日k线;w=周、m=月、5=5分钟、60=60分钟k线数据等

Baostock真的是很良心了,相比之下其余三个总是缺胳膊少腿

2、Tushare pro版

其实一开始比较想用的是Tushare,因为相对来说Tushare获取同样数据的代码量比Baostock少多了,也不用登录退出啥的,直接一步到位

链接附此 Tushare数据平台

需要先注册个账号,获取个人Token

在这里插入图片描述

在上述已经获得沪深300成分股的code条件下,以获取两支股票为例,代码量是相当的少

import tushare as ts
pro = ts.pro_api('your token')  # 复制上面的接口token就好
df1=pro.daily(ts_code='600000.sh,600009.sh', start_date='20220101', end_date='20220701')
df1

获取到的数据也是比较齐全的,排列跟Baostock不同,按同一时间的所有股票先排
在这里插入图片描述
但是这个平台特别坑的一点就是……我就下载了没几次怎么就下不下来了!!!
后面换了好几个时间继续下也还是空的,不知道是积分不够还是咋滴,还是弃了……

3、AKshare

这个接口的代码量也很少,少的我心动,获取到的数据名还都是中文的

import akshare as ak
df = ak.index_zh_a_hist(symbol = "000905", period = "daily", start_date = "20200101", end_date = "20221231" )
df

在这里插入图片描述
然而……
一时间没找到股票code在这里对应的symbol,没后缀名,连前缀的都不一样,统一code麻烦,还是算了

4、聚宽量化平台

链接附此 聚宽Join Quant

本来都已经注册好了,看着代码量也不是很多,最重要的是它可以动态地获取沪深300每一天包括的成分股,然后根据获取到的code下载数据,也免了上面这一顿code_name获取操作

可申请一年试用,就可以获取数据,但是好像数据种类不是很多,示例只看到常规的open、close那6个,不知道能否改参数
在这里插入图片描述

遍历日期,通过动态获取沪深300成分股code来获取数据,有需要的可以试试

#导入聚宽数据的sdk
import jqdatasdk as jd
from datetime import date,timedelta
jd.auth("账号","密码")
#数据储存路径
filename='D:\jukuan.csv' 

#遍历历史日期,并逐步导入数据到csv文件
for i in range(30):
    trade_date=date(2020,1,2)+timedelta(days=i)
    stocks=jd.get_index_stocks('000300.XSHG', date=trade_date)
    df=jd.get_price(stocks,start_date=trade_date, end_date=trade_date,
                    frequency='daily',skip_paused=False).to_frame()
    df.to_csv(filename,mode='a',header=None)

总的来看还是选择了Baostock,对这些平台也不是很了解,可能有些参数没注意到,如果有更好获取股票数据的方法,望留言分享一起学习,不胜感激!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/788046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软著代码整理工具(针对cpp代码),python实现

一. 内容简介 软著代码整理工具(针对cpp代码),python实现 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码链接 https://gitee.com/JJW_1601897441/csdn 三.主要流程 3.1 格式要求 代码语法要求 对软件著作权提交源代码是提供原始的代码…

AcWing241. 楼兰图腾(树状数组)

输入样例: 5 1 5 3 2 4输出样例: 3 4解析: 以某个点 i 为最低点的 V 的数量,为 i 左侧和右侧比 a[ i ] 大的数量 a,b 的乘积。 但是,直接求这两个数的复杂度为O(n),则整个复杂度为O( n^2 )&am…

TortoiseGit安装

1、TortoiseGit简介 TortoiseGit是基于TortoiseSVN的Git版本的Windows Shell界面。它是开源的,可以完全免费使用。 TortoiseGit 支持你执行常规任务,例如commit、显示日志、区分两个版本、创建分支和标签、创建补丁等。 2、TortoiseGit下载 (1)Tortois…

MySQL高级篇第2章(MySQL的数据目录)

文章目录 1、MySQL8的主要目录结构1.1 数据库文件的存放路径1.2 相关命令目录1.3 配置文件目录 2、数据库和文件系统的关系2.1 查看默认数据库2.2 数据库在文件系统中的表示2.3 表在文件系统中的表示2.3.1 InnoDB存储引擎模式2.3.2 MyISAM存储引擎模式 2.4 小结 1、MySQL8的主要…

论文笔记--Skip-Thought Vectors

论文笔记--Skip-Thought Vectors 1. 文章简介2. 文章概括3 文章重点技术3.1 Skip Thought Vectors3.2 词表拓展 4. 文章亮点5. 原文传送门6. References 1. 文章简介 标题:Skip-Thought Vectors作者:Ryan Kiros, Yukun Zhu, Ruslan Salakhutdinov, Rich…

【设计模式——学习笔记】23种设计模式——桥接模式Bridge(原理讲解+应用场景介绍+案例介绍+Java代码实现)

问题引入 现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图 【对应类图】 【分析】 扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们…

JDK9 接口特性(heima)

JDK9 接口特性(heima) 将log方法私有化

04. Idea集成Docker

目录 1、前言 2、开启docker远程 2.1、配置远程访问模式 2.2、重启docker服务 2.3、验证 3、Idea配置Docker 3.1、配置证书登录 4、创建Dockerfile 4.1、编写Dockerfile 4.2、配置启动项 4.3、访问接口 1、前言 上一节中,我们介绍了Dockerfile的方式构建…

MURF20100CT-ASEMI快恢复对管20A 1000V

编辑:ll MURF20100CT-ASEMI快恢复对管20A 1000V 型号:MURF20100CT 品牌:ASEMI 封装:TO-220F 恢复时间:50ns 正向电流:20A 反向耐压:1000V 芯片大小:102MIL*2 芯片个数&…

C语言每日一题:4.消失的数字+数字在升序数组中出现的次数+整数转换

消失的数字: 思路1:排序遍历 1.使用qsort排序数组判断当前数值1是否是数组下一个元素的数值。 2.如果是一直循环注意数组越界,如果不是那么当前的数组的数值1就是消失的数。 3.存在0——n的数字是第n个数没有了。循环过程中从头到尾也找不到这…

C++ 哈希的应用【位图】

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2022 版本 17.6.5 文章目录 🌇前言🏙️正文1、问题一2、位图概念3、位图的模拟实现3.1、基本思路3.2、set3.3、reset3.4、…

从电商指标洞察到运营归因,只需几句话?AI 数智助理准备好了!

Lily 是名入职不久的电商运营助理,最近她想要根据 2022 年的客单价情况,分析品牌 A 在不同电商渠道的用户行为和表现,并提供一些有价值的洞察和建议给客户。然而在向技术人员提报表需求后,技术人员以需求排满为借口拒绝了。 Lily …

STM32CUBEMX配置 定时器中断 和 上升沿中断(实现检测1s以内的脉冲个数)

———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动&#x…

速锐得开发社区-新一代汽车网络通信技术CAN FD的特点归纳

随着汽车工业的快速发展,汽车逐渐走向智能化,功能也越来越丰富,例如特斯拉、比亚迪、理想汽车为代表,在车载导航、驻车雷达、胎压监测、倒车影像、无钥匙启动、定速巡航、自动泊车、高级辅助驾驶系统、自动驾驶、域控制器、智能网…

慎投!中科院2区TOP期刊被标记为“On Hold”!

近日,小编从科睿唯安旗下的“Master Journal List”官网查到,知名老牌期刊Chemosphere竟然被标记为“On Hold”状态!究竟是怎么回事呢? 中科院TOP期刊标记为“On Hold” 出版社:Elsevier ISSN:0045-6535 …

【广州华锐互动】无人值守变电站AR虚拟测控平台

无人值守变电站AR虚拟测控平台是一种基于增强现实技术的电力设备巡检系统,它可以利用增强现实技术将虚拟信息叠加在真实场景中,帮助巡检人员更加高效地完成巡检任务。这种系统的出现,不仅提高了巡检效率和准确性,还降低了巡检成本…

vray GPU渲染如何设置?最适合 VRay 渲染的 GPU 是什么?

Chaos 提供的 Vray GPU是一个独立的渲染引擎,提供 GPU 硬件加速。它还与 CPU(处理器)配合使用,并利用 CPU 和 GPU 硬件进行无缝混合渲染。 GPU 渲染使 Vray GPU 渲染引擎能够在系统的 GPU 而不是 CPU 上执行光线跟踪计算。由于 G…

Linux学习之case

case的格式如下: case "变量" in值1)指令集1;;值2)指令集2;;*)指令集n;; esaccase会将变量的值跟值1、值2等进行比较,符合就执行后边对应的指令集,注意)只是一个标识,表明这是一个分支,;;是一个分支结束&am…

Qt控件样式设置、QSS语法介绍

一、前言 QT是比较流行的跨平台应用程序框架,提供了丰富的控件库和功能强大的工具,用于创建各种类型的应用程序。虽然QT默认提供的样式看起来很不错,但是如果想要自定义的应用程序的外观,可以使用QT样式表(QSS)来设置控件的外观和行为。 QSS是一种基于CSS的样式表语言,…

DB-GPT:强强联合Langchain-Vicuna的应用实战开源项目,彻底改变与数据库的交互方式

今天看到 蚂蚁科技 Magic 开源的DB-GPT项目,觉得创意很好,集成了当前LLM的主流技术,主要如下 Langchain: 构建在LLM之上的应用开发框架HuggingFace: 模型标准,提供大模型管理功能Vicuna: 一个令GPT-4惊艳的开源聊天机…