第一章:金融数据获取——用Tushare搞定股票行情、财务与指数数据
做量化选股,第一步就是搞数据。没有数据,再牛的模型也是空中楼阁。
我个人习惯用Tushare来获取A股数据。为什么?因为它数据全、接口稳定,而且社区活跃。你想想看,一个工具能同时拿到行情、财务、指数三类数据,省去多少对接不同数据源的麻烦。
1.1 Tushare是什么?
Tushare是一个开源的金融数据接口库。它提供股票、基金、期货、宏观经济等各类数据。说白了,它就是量化人的数据仓库。
我记得刚开始做量化时,还在手动从财经网站爬数据,效率低不说,数据质量也没保障。后来换成Tushare,一天能搞定以前一周的工作量。
核心特点:
- 数据覆盖广:A股、港股、美股、期货、基金、指数
- 更新及时:交易日数据T+1即可获取
- 接口统一:所有数据通过API调用,代码风格一致
1.2 安装与配置
安装很简单,一行命令搞定:
pip install tushare
但要注意,Tushare Pro版本需要token。你需要去官网注册,获取自己的token。
避坑指南:我曾经因为token泄露,导致别人用我的额度。建议把token写在环境变量里,别硬编码在代码中。
import tushare as ts
# 设置token
ts.set_token('你的token')
# 初始化pro接口
pro = ts.pro_api()
1.3 获取股票行情数据
行情数据是量化选股的基础。我们最常用的是日线数据。
# 获取平安银行(000001.SZ)的日线数据
df = pro.daily(ts_code='000001.SZ', start_date='20240101', end_date='20241231')
print(df.head())
返回的数据包含:
| 字段 | 说明 |
|---|---|
| ts_code | 股票代码 |
| trade_date | 交易日期 |
| open | 开盘价 |
| high | 最高价 |
| low | 最低价 |
| close | 收盘价 |
| vol | 成交量(手) |
| amount | 成交额(千元) |
小技巧:如果你需要批量获取多只股票的数据,可以用trade_cal接口先拿到交易日历,再循环调用daily接口。我一般会配合pandas的concat来合并数据。
1.4 获取财务数据
选股模型离不开财务指标。Tushare提供了丰富的财务数据接口。
# 获取平安银行的财务指标
df_fin = pro.fina_indicator(ts_code='000001.SZ', start_date='20240101', end_date='20241231')
print(df_fin[['roe', 'eps', 'bps', 'profit_dedt']].head())
常用的财务指标:
- roe:净资产收益率——衡量公司盈利能力
- eps:每股收益——直接反映每股价值
- bps:每股净资产——安全边际的参考
- profit_dedt:扣非净利润——剔除一次性收益后的真实利润
嗯,这里要注意:财务数据是季度更新的,别拿季报数据去做日频交易信号,时间对不上。
1.5 获取指数数据
指数数据用于判断市场整体走势。我们常用沪深300、中证500等。
# 获取沪深300指数数据
df_index = pro.index_daily(ts_code='000300.SH', start_date='20240101', end_date='20241231')
print(df_index.head())
指数数据字段和股票类似,但多了个pct_chg字段,表示涨跌幅。这个在做市场状态判断时很有用。
实战经验:我在做多因子模型时,会把指数数据作为市场因子加入回归。比如用沪深300的收益率作为市场基准,计算个股的alpha。
1.6 数据获取的完整流程
下面这张图展示了从数据获取到模型输入的完整链路:
1.7 数据存储与复用
每次从Tushare拉数据太慢了,而且会消耗积分。我建议把数据存到本地。
# 保存到CSV
df.to_csv('stock_data.csv', index=False)
# 或者保存到HDF5(适合大数据量)
df.to_hdf('stock_data.h5', key='daily', mode='w')
我的习惯:每天收盘后跑一次数据更新脚本,把增量数据追加到本地数据库。这样既保证数据新鲜,又不会浪费Tushare的积分。
1.8 常见问题与避坑
- 积分不够用?——Tushare Pro有积分限制。我一般把高频调用的数据缓存到本地,低频数据才实时拉取。
- 数据对不上?——复权问题。Tushare的daily接口返回的是未复权数据。做回测时记得用复权数据,否则收益率计算会出错。
- 接口超时?——加个重试机制。网络波动时自动重试3次,基本能解决。
曾经踩过的坑:有一次我直接用未复权数据做回测,结果某只股票分红后价格跳空,模型以为出现了巨大亏损,直接清仓了。后来才意识到是复权问题。所以,做回测一定要用后复权数据。
好了,数据获取这块就讲到这里。掌握了Tushare的行情、财务、指数三大接口,你就有了量化选股的原材料。下一章我们聊聊怎么把这些数据加工成有效的选股因子。