数据?使用Baostock的API获取股票数据"/>
如何使用python获取免费的股票行情数据?使用Baostock的API获取股票数据
如何获取免费的股票行情数据?
内容摘要:使用Baostock的API获取股票行情数据;格式化获得的股票行情数据。
1.导入必要的模块
关键模块是: ①numpy、pandas:用来处理数据 ②baostock:用来获取股票数据
# 处理数据
import numpy as np
import pandas as pd# 获取股票数据
import baostock as bs
2.获取股票数据
我们利用baostock获取股票数据。为什么用baostock,而不用tushare?
因为baostock是一个免费、开源的证券数据平台(无需注册)。 提供大量准确、完整的证券历史行情数据、上市公司财务数据等。 通过python API获取证券数据信息,满足量化交易投资者、数量金融爱好者、计量经济从业者数据需求。
- 返回的数据格式:
- pandas DataFrame类型,以便于用pandas/NumPy/Matplotlib进行数据分析和可视化。
- 同时支持通过BaoStock的数据存储功能,将数据全部保存到本地后进行分析。
- 支持语言:目前版本BaoStock目前只支持Python3.5及以上(暂不支持python 2.x)。
下载安装 方式1: pip install baostock
使用国内源安装:
pip install baostock -i / --trusted-host pypi.tuna.tsinghua.edu
方式2:访问 下载安装
python setup.py install或pip install xxx.whl
baostock的数据范围
股票数据
- 日、周、月K线数据,时间范围:1990-12-19至今。
- 5、15、30、60分钟K线数据,时间范围:1999-07-26至今。
指数数据
- 日、周、月K线已经包含指数:综合指数,规模指数,一级行业指数,二级行业指数,策略指数,成长指数,价值指数,主题指数,基金指数,债券指数。
- 时间范围:2006-01-01至今。
季频财务数据
- 已经包含的财务数据:部分上市公司资产负债信息、上市公司现金流量信息、上市公司利润信息、上市公司杜邦指标信息。
- 时间范围:2007年至今。
季频公司报告
- 上市公司业绩预告信息,时间范围:2003年至今。
- 上市公司业绩快报信息,时间范围:2006年至今。
我们把获取数据的相关代码,封装成函数,以方便重复调用。
函数的参数,分别为股票代码、数据开始时间、数据结束时间以及频率。 默认获取的数据项为:
date,code,open,high,low,close,volume
相关代码如下:
# 获取股票数据,并将数据规范化def get_data(code="sh.600000", start_date="2020-06-01", end_date="2021-03-26", frequency="d"
):#### 登陆baostock系统 ####lg = bs.login()# 显示登陆返回信息print("登录响应代码:" + lg.error_code)print("登录响应信息:" + lg.error_msg)data = bs.query_history_k_data_plus(code,fields="date,code,open,high,low,close,volume",start_date=start_date,end_date=end_date,frequency="d",adjustflag="3",)data_list = []while (data.error_code == "0") & data.next():# 获取一条记录,将记录合并在一起data_list.append(data.get_row_data())# 转为dataframeresult = pd.DataFrame(data_list, columns=data.fields)# 警惕:数据全是字符串:<class 'str'># 把字符串转为数值result.open = result.open.astype("float64").round(2)result.close = result.close.astype("float64").round(2)result.high = result.high.astype("float64").round(2)result.low = result.low.astype("float64").round(2)result.volume = result.volume.astype("int")# date列转为时间类型result.date = pd.DatetimeIndex(result.date)# dataframe规范化data2 = pd.DataFrame({"open": result["open"].values,"close": result["close"].values,"high": result["high"].values,"low": result["low"].values,"volume": result["volume"].values,},index=result["date"].values)#### 登出系统 ####bs.logout()return data2
这里有几点,需要特别注意的。
- 使用baostock获取数据前,需要先登录。
- baostock不能直接返回dataframe类型的数据,需要进行相应处理,并转化。
- baostock获取的数据,都是字符串类型的。如:open 的值的类型是:<class 'str'>。因此需要将其转换为float64等类型。
比如,我们要获取格力电器的日线数据: 格力电器的代码是:000651。属于深交所的股票,因此在其代码前加sz.
,即sz.000651
data1 = get_data(code="sz.000651", start_date="2020-06-01", end_date="2021-03-26", frequency="d")
open close high low volume
2020-06-01 57.51 57.97 58.26 57.19 57925071
2020-06-02 58.88 58.09 58.98 57.71 46837490
2020-06-03 58.10 58.02 58.49 57.51 45819960
2020-06-04 58.60 59.65 59.69 58.40 65622849
2020-06-05 60.00 60.17 61.01 59.89 58536642
... ... ... ... ... ...
2021-03-22 60.05 60.94 61.19 59.60 39575697
2021-03-23 60.85 61.41 62.00 60.28 38481259
2021-03-24 61.40 61.35 62.00 61.07 32399326
2021-03-25 60.86 61.38 61.63 60.70 25338726
2021-03-26 62.60 61.62 62.93 61.18 37839591[201 rows x 5 columns]
又如,我们要获取中国平安的1小时数据: 中国平安的代码是:601318。属于上交所的股票,因此在其代码前加sh.
,即sh.601318
data2 = get_data(code="sh.601318", start_date="2020-06-01", end_date="2021-03-26", frequency="60m")
open close high low volume
2020-06-01 71.40 72.16 72.23 71.23 45767284
2020-06-02 72.02 74.28 74.53 72.01 81052327
2020-06-03 75.00 75.01 76.69 75.00 99148840
2020-06-04 75.42 75.14 75.71 74.58 45388022
2020-06-05 75.14 75.30 75.44 74.40 34980754
... ... ... ... ... ...
2021-03-22 79.99 79.82 80.27 79.53 54273091
2021-03-23 79.89 80.05 80.60 79.12 51116947
2021-03-24 79.99 79.01 80.30 78.71 63315814
2021-03-25 79.23 79.20 79.66 78.99 43650615
2021-03-26 79.58 80.01 80.30 79.56 45348477[201 rows x 5 columns]
我们成功地获取了股票的数据,数据是量化交易的基础,有了数据,我们就可以愉快地进行数据分析了!
3.全部代码如下:
# 处理数据
import numpy as np
import pandas as pd
# 获取股票数据
import baostock as bs# 获取股票数据,并将数据规范化
def get_data(code="sh.600000", start_date="2020-06-01", end_date="2021-03-26", frequency="d"
):#### 登陆baostock系统 ####lg = bs.login()# 显示登陆返回信息print("登录响应代码:" + lg.error_code)print("登录响应信息:" + lg.error_msg)data = bs.query_history_k_data_plus(code,fields="date,code,open,high,low,close,volume",start_date=start_date,end_date=end_date,frequency="d",adjustflag="3",)data_list = []while (data.error_code == "0") & data.next():# 获取一条记录,将记录合并在一起data_list.append(data.get_row_data())# 转为dataframeresult = pd.DataFrame(data_list, columns=data.fields)# 警惕:数据全是字符串:<class 'str'># 把字符串转为数值result.open = result.open.astype("float64").round(2)result.close = result.close.astype("float64").round(2)result.high = result.high.astype("float64").round(2)result.low = result.low.astype("float64").round(2)result.volume = result.volume.astype("int")# date列转为时间类型result.date = pd.DatetimeIndex(result.date)# dataframe规范化data2 = pd.DataFrame({"open": result["open"].values,"close": result["close"].values,"high": result["high"].values,"low": result["low"].values,"volume": result["volume"].values,},index=result["date"].values)#### 登出系统 ####bs.logout()return data2# 获取格力电器的日线数据
data1 = get_data(code="sz.000651", start_date="2020-06-01", end_date="2021-03-26", frequency="d")
print(data1)
# 获取中国平安的1小时数据
data2 = get_data(code="sh.601318", start_date="2020-06-01", end_date="2021-03-26", frequency="60m")
print(data2)print('执行完毕!')
更多推荐
如何使用python获取免费的股票行情数据?使用Baostock的API获取股票数据
发布评论