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

news/2024/11/28 11:49:12/

目录

  • 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:successupdateDate       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.ppmy.cn/news/979220.html

相关文章

高效协作处理缓存清理需求:生产者-消费者模式助力多模块缓存管理

在现代应用系统中,缓存是提高性能和减少数据库负载的重要手段之一。然而,缓存的数据在某些情况下可能会过期或者变得无效,因此需要及时进行清理。在复杂的应用系统中,可能有多个系统、多个模块产生缓存清理需求,而这些…

初识Mybatis,并创建第一个Mybatis项目(详细图文教程)

目录 前言 一、Mybatis是什么? 二、Mybatis的优点 三、创建第一个Mybatis项目 配置Mybatis开发环境 创建数据库 添加框架 配置连接字符串和Mybatis 使用Mybatis操作数据库 测试 前言 Spring 集成了 Mybatis 框架,方便我们更加便捷的使用&#…

JSON格式Python,Java,PHP等封装获取淘宝商品快递费用数据API方法

淘宝是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取淘宝天猫商品详情快递费用数据,您可以通过开放平台的接口或者直接访问淘宝天猫商城的网页来获取商品详情快递费用。以下是两种常用方法的介绍&a…

腾讯语音SDK记录4098,4101

起因:Unity项目想要实现发送语音的功能。记录一下接入腾讯语音SDK中一些遇到的问题。 首先,Unity环境是支持测试整个录音流程的。确定这点的话,就不会在找不到问题的时候怀疑是环境问题,然后打包还是一样的报错了。 以下是常见的…

火山引擎DataLeap的Data Catalog系统公有云实践 (上)

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 前言 Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据、数据消费者找数和理解数的业务场景。本篇内容源自于火山引擎大数据研发治…

使用node内置test runner,和 Jest say 拜拜

参考 https://nodejs.org/dist/latest-v20.x/docs/api/test.html#test-runner 在之前,我们写单元测试,必须安装第三方依赖包,而从node 20.0.0 版本之后,可以告别繁琐的第三方依赖包啦,可直接使用node的内置test runner…

Ubuntu18.04 下配置Clion

配置Clion 安装gcc、g、make Ubuntu中用到的编译工具是gcc©,g(C),make(连接)。因此只需安装对应的工具包即可。Ubuntu下使用命令安装这些包: (1)安装gcc sudo apt install gcc&am…

MFC第二十天 数值型关联变量 和单选按钮与复选框的开发应用

文章目录 数值型关联变量数值型关联变量的种类介绍 单选按钮与复选框单选按钮的组内选择原理解析单选按钮和复选框以及应用数值型关联变量的开发CMainDlg.cppCInputDlg.hCInputDlg.cpp 附录 数值型关联变量 数值型关联变量的种类介绍 1、 数值型关联变量: a)控件型…