Tushare
金融数据接口库
Baostock 是一个 免费、开源的股票数据接口库,专注于提供 中国 A 股的历史数据、财务数据、指数数据等。它适用于 量化投资、股票分析、回测研究,并且数据较为稳定,适合长周期分析。
✅ 完全免费:无需订阅或付费,所有用户均可使用
✅ 数据源稳定:数据来自 证券交易所,适用于长期回测
✅ 支持多种数据:包括 A 股历史数据、财务数据、指数数据、交易日历等
✅ 数据精度高:支持 日线、周线、月线级别,并提供 前复权、后复权 处理
✅ 轻量级 & 易使用:API 设计简单,适合 Python 量化交易
| 数据类型 | 数据内容 |
|---|---|
| 股票数据 | A 股日线、周线、月线数据、前复权、后复权、成交量、换手率 |
| 指数数据 | 上证指数、深证成指、沪深 300、创业板指数等 |
| 财务数据 | 每股收益、市盈率、净利润、资产负债率等 |
| 交易日历 | 查询股票市场开市、休市日期 |
| 股票基本信息 | 公司代码、行业、上市日期、股票状态 |
pip install baostock
import baostock as bs
import pandas as pd
# 登录 Baostock 服务器
lg = bs.login()
# 检查登录状态
print(f"登录状态:{lg.error_msg}")
# 查询股票日 K 线数据 (前复权)
rs = bs.query_history_k_data_plus(
"sh.600000", # 证券代码(sh:上海, sz:深圳)
"date,open,high,low,close,volume,amount", # 选择字段
start_date="2024-01-01",
end_date="2024-02-10",
frequency="d", # 日线
adjustflag="2" # 复权类型(1:不复权,2:前复权,3:后复权)
)
# 解析数据
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
print(df.head())
# 退出 Baostock
bs.logout()
返回示例:
| date | open | high | low | close | volume | amount |
|---|---|---|---|---|---|---|
| 2024-01-02 | 10.1 | 10.5 | 10.0 | 10.3 | 1000000 | 1030000 |
| 2024-01-03 | 10.3 | 10.7 | 10.2 | 10.5 | 1200000 | 1260000 |
# 查询 2023 年度财务数据
rs = bs.query_balance_data(code="sh.600000", year=2023, quarter=4)
# 解析数据
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
print(df.head())
bs.logout()
返回示例(部分):
| code | totalAssets | netProfit |
|---|---|---|
| sh.600000 | 5000000000 | 300000000 |
rs = bs.query_history_k_data_plus(
"sh.000300", # 沪深 300 指数代码
"date,open,high,low,close,volume",
start_date="2024-01-01",
end_date="2024-02-10",
frequency="d",
adjustflag="2"
)
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
print(df.head())
bs.logout()
rs = bs.query_trade_dates(start_date="2024-01-01", end_date="2024-12-31")
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
print(df[df['is_trading_day'] == '1'].head()) # 筛选交易日
bs.logout()
| 对比项 | Baostock | Tushare | AkShare |
|---|---|---|---|
| 收费情况 | 免费 | 部分免费,部分需付费 | 免费 |
| 数据源 | 证券交易所 | 官方交易所、券商 | 新浪、东方财富 |
| 股票数据 | ✅ A 股 | ✅ A 股、港股、美股 | ✅ A 股、港股、美股 |
| 指数数据 | ✅ | ✅ | ✅ |
| 财务数据 | ✅ | ✅(付费) | ✅ |
| 复权处理 | ✅(前复权、后复权) | ✅(部分需要 Pro 版) | ✅ |
| 实时数据 | ❌ | ✅(付费) | ✅ |
| 注册 API | 不需要 | 需要 | 不需要 |
| 适合用途 | 长期回测、财务分析 | 实时行情、专业量化 | 快速数据抓取、分析 |
✅ 长期回测:适用于 日线级别、周线级别的回测分析
✅ 财务数据分析:适合财务指标、基本面分析
✅ 指数分析:获取沪深 300、上证指数等历史数据
✅ 股票研究:提供前复权、后复权数据,适合长期投资研究