如何使用python获取免费的股票行情数据?使用Baostock的API获取股票数据

编程入门 行业动态 更新时间:2024-10-09 12:33:12

如何使用python获取免费的股票行情<a href=https://www.elefans.com/category/jswz/34/1771445.html style=数据?使用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

这里有几点,需要特别注意的。

  1. 使用baostock获取数据前,需要先登录。
  2. baostock不能直接返回dataframe类型的数据,需要进行相应处理,并转化。
  3. 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获取股票数据

本文发布于:2024-03-04 03:21:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1708141.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据   如何使用   股票行情   股票   Baostock

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!