by 雪隐 from juejin.cn/user/143341...
文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可联系授权
Tushare股票数据获取实战教程
Tushare是国内知名的免费金融数据平台,提供股票、基金、期货等多种金融数据。本教程通过三个实战案例,带你掌握使用Tushare Pro获取股票数据的方法。这也能弥补akshare发生数据无法获取的情况。
环境准备
1. 安装Tushare
bash
pip install tushare
2. 获取Token
- 访问 Tushare Pro 注册账号
- 进入个人中心 → 接口TOKEN,复制你的Token
- 设置环境变量:
bash
# macOS/Linux
export TUSHARE_TOKEN="你的Token"
# Windows PowerShell
$env:TUSHARE_TOKEN="你的Token"
或在Python中直接设置:
python
os.environ["TUSHARE_TOKEN"] = "你的Token"
3. Token权限说明
| 数据类型 | 权限要求 |
|---|---|
| 日线数据 | 基础积分(免费) |
| 分钟数据 | 需要捐助1000元开通权限 |
| 财务数据 | 需要2000积分 |
案例一:获取日线数据
日线数据是最常用的行情数据,包含每日的开盘价、收盘价、最高价、最低价和成交量(OHLCV)。
完整代码
python
# -*- coding: utf-8 -*-
import os
import pandas as pd
import tushare as ts
STOCK_CODE = '300750.SZ' # 宁德时代
STOCK_NAME = '宁德时代'
DATA_START = '20240101'
DATA_END = '20251231'
def get_pro():
"""获取Tushare Pro API实例"""
token = os.environ.get("TUSHARE_TOKEN")
if not token:
raise RuntimeError("请先设置环境变量 TUSHARE_TOKEN")
ts.set_token(token.strip())
return ts.pro_api()
def download_stock_data():
# 初始化API
pro = get_pro()
# 获取前复权日线数据
df = ts.pro_bar(
ts_code=STOCK_CODE,
start_date=DATA_START,
end_date=DATA_END,
adj='qfq', # qfq=前复权, hfq=后复权, None=不复权
freq='D' # D=日线
)
# 数据处理
df = df.rename(columns={
'trade_date': 'date',
'vol': 'volume'
})
df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')
df = df.sort_values('date').reset_index(drop=True)
# 只保留核心列
keep_cols = ['date', 'open', 'high', 'low', 'close', 'volume']
df = df[[c for c in keep_cols if c in df.columns]]
# 保存CSV
df.to_csv('daily_data.csv', index=False, encoding='utf-8-sig')
return df
if __name__ == "__main__":
df = download_stock_data()
print(df.head())
关键点说明
- 股票代码格式 :
300750.SZ表示深圳交易所的宁德时代,000001.SZ表示深圳交易所的上证指数 - 复权类型 :
adj='qfq':前复权(推荐),保持价格连续性adj='hfq':后复权adj=None:不复权
- ts.pro_bar :Tushare推荐的行情获取方法,比
daily接口更方便
运行效果
yaml
开始下载股票数据
股票:宁德时代(300750.SZ)
日期范围:20240101 至 20251231
------------------------------------------------------------
成功获取 300 条日线数据
数据日期范围:2024-01-02 至 2024-06-28
数据预览(前5行):
date open high low close volume
0 2024-01-02 1680.0 1698.0 1671.0 1685.0 2300000
1 2024-01-03 1685.0 1700.0 1678.0 1692.0 2100000
...
案例二:获取分钟数据
分钟数据用于日内策略分析,支持1/5/15/30/60分钟频率。
完整代码
python
# -*- coding: utf-8 -*-
import os
import pandas as pd
import tushare as ts
STOCK_CODE = '300750.SZ'
STOCK_NAME = '宁德时代'
TARGET_DATE = '20260210'
FREQ = '1min' # 可选:1min, 5min, 15min, 30min, 60min
def get_pro():
token = os.environ.get("TUSHARE_TOKEN")
if not token:
raise RuntimeError("请先设置环境变量 TUSHARE_TOKEN")
ts.set_token(token.strip())
return ts.pro_api()
def download_minute_data():
pro = get_pro()
df = ts.pro_bar(
ts_code=STOCK_CODE,
start_date=TARGET_DATE,
end_date=TARGET_DATE,
adj='qfq',
freq=FREQ
)
# 数据处理
df = df.rename(columns={
'trade_time': 'datetime',
'vol': 'volume'
})
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.sort_values('datetime').reset_index(drop=True)
# 保存
df.to_csv('minute_data.csv', index=False, encoding='utf-8-sig')
return df
if __name__ == "__main__":
df = download_minute_data()
print(df.head(10))
注意事项
- 权限要求:分钟数据需要捐助1000元开通权限
- 频次限制:每分钟500次,每次最多8000行
- 日期要求:必须是交易日,非交易日无数据
案例三:获取财务数据
财务数据用于基本面分析,包括盈利能力、偿债能力、成长能力等指标。
完整代码
python
# -*- coding: utf-8 -*-
import os
import pandas as pd
import tushare as ts
STOCK_CODE = '300750.SZ'
STOCK_NAME = '宁德时代'
# 定义需要的财务指标字段
FINA_FIELDS = ",".join([
"ts_code", "ann_date", "end_date",
# 每股指标
"eps", # 基本每股收益
"bps", # 每股净资产
"ocfps", # 每股经营现金流
# 盈利能力
"roe", # 净资产收益率(%)
"grossprofit_margin", # 销售毛利率(%)
# 偿债能力
"debt_to_assets", # 资产负债率(%)
"current_ratio", # 流动比率
# 成长能力
"netprofit_yoy", # 净利润同比增长率(%)
"or_yoy", # 营收同比增长率(%)
# 营运能力
"assets_turn", # 总资产周转率(次)
])
def get_pro():
token = os.environ.get("TUSHARE_TOKEN")
if not token:
raise RuntimeError("请先设置环境变量 TUSHARE_TOKEN")
ts.set_token(token.strip())
return ts.pro_api()
def download_financial_data():
pro = get_pro()
# 使用 fina_indicator 接口获取财务指标
df = pro.fina_indicator(ts_code=STOCK_CODE, fields=FINA_FIELDS)
# 按报告期排序
df = df.sort_values('end_date').reset_index(drop=True)
# 保存
df.to_csv('financial_data.csv', index=False, encoding='utf-8-sig')
return df
if __name__ == "__main__":
df = download_financial_data()
print(df.tail(3).T) # 转置显示最近3期
常用财务指标速查
每股指标
| 字段 | 说明 |
|---|---|
| eps | 基本每股收益 |
| bps | 每股净资产 |
| ocfps | 每股经营现金流 |
盈利能力
| 字段 | 说明 |
|---|---|
| roe | 净资产收益率 |
| grossprofit_margin | 销售毛利率 |
| netprofit_margin | 销售净利率 |
成长能力
| 字段 | 说明 |
|---|---|
| netprofit_yoy | 净利润同比增长率 |
| or_yoy | 营收同比增长率 |
偿债能力
| 字段 | 说明 |
|---|---|
| debt_to_assets | 资产负债率 |
| current_ratio | 流动比率 |
| quick_ratio | 速动比率 |
统一的数据保存结构
三个脚本都遵循统一的数据保存规范:
python
DATA_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data")
os.makedirs(DATA_DIR, exist_ok=True)
output_file = os.path.join(DATA_DIR, f'{STOCK_CODE.replace(".", "_")}_daily_tushare.csv')
df.to_csv(output_file, index=False, encoding='utf-8-sig')
保存的文件命名规则:{股票代码}_daily_tushare.csv,放在脚本所在目录的data文件夹下。
错误处理
python
import traceback
def download_stock_data():
try:
df = ts.pro_bar(...)
if df is None or len(df) == 0:
print("无法获取数据,请检查:")
print(" 1. Token是否正确设置")
print(" 2. 股票代码是否正确")
print(" 3. 是否有足够权限")
return None
return df
except Exception as e:
print(f"发生错误:{e}")
traceback.print_exc()
return None
总结
| 数据类型 | 接口 | 权限要求 | 主要参数 |
|---|---|---|---|
| 日线 | ts.pro_bar(freq='D') | 基础积分 | ts_code, start_date, end_date, adj |
| 分钟 | ts.pro_bar(freq='1min') | 捐助1000元 | ts_code, start_date, end_date, adj, freq |
| 财务 | pro.fina_indicator() | 2000积分 | ts_code, fields |
Tushare的优势在于数据全面、接口简洁,适合个人投资者进行量化分析。建议先从日线数据开始,掌握基础后再扩展到分钟和财务数据。
写在最后
如果大家觉得这篇文章对你们有帮助,请记得点赞评论。下一章介绍一种更加稳定的获取数据方法,请大家不要错过。