第一章:金融数据获取——用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 数据获取的完整流程

下面这张图展示了从数据获取到模型输入的完整链路:

量化选股数据获取流程 Tushare数据源 行情数据 财务数据 指数数据 数据处理 • 缺失值处理 • 异常值过滤 • 数据对齐 • 因子计算 • 标准化处理 选股模型输入

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的行情、财务、指数三大接口,你就有了量化选股的原材料。下一章我们聊聊怎么把这些数据加工成有效的选股因子。

专注资料整理