Python获取股票数据——以沪深300成分股为例
后台-插件-广告管理-内容页头部广告(手机) |
目录
- 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获取证券数据信息
- 1
- 2
首先获取沪深300成分股每支股票的code和code_name
日期这里就不做额外的要求了,默认更新到的哪天
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
获取到的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!- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
接着我们导入获取的股票名csv
hs=pd.read_csv('D:/hs300_stocks.csv',encoding='gbk')- 1
通过循环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()- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
来看一下运行情况
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!- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
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- 1
- 2
- 3
- 4
获取到的数据也是比较齐全的,排列跟Baostock不同,按同一时间的所有股票先排
但是这个平台特别坑的一点就是……我就下载了没几次怎么就下不下来了!!!
后面换了好几个时间继续下也还是空的,不知道是积分不够还是咋滴,还是弃了……
3、AKshare
这个接口的代码量也很少,少的我心动,获取到的数据名还都是中文的
import akshare as ak df = ak.index_zh_a_hist(symbol = "000905", period = "daily", start_date = "20200101", end_date = "20221231" ) df- 1
- 2
- 3
然而……
一时间没找到股票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)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
总的来看还是选择了Baostock,对这些平台也不是很了解,可能有些参数没注意到,如果有更好获取股票数据的方法,望留言分享一起学习,不胜感激!
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |