4. 金融数据获取:用Tushare搞定股票数据

做量化交易,数据就是你的弹药。没有干净的数据,再牛的策略也是白搭。

我个人习惯用Tushare来获取A股数据。这玩意儿开源免费,数据覆盖面广,社区也活跃。你想想看,从日线到分钟线,从基本面到技术指标,基本都能拿到。

4.1 Tushare 快速上手

先装包,再注册。就这么简单。

pip install tushare

装完之后,去 tushare.pro 注册个账号,拿到你的 token。嗯,这里要注意,token 相当于你的钥匙,别泄露了。

import tushare as ts

# 初始化
pro = ts.pro_api('你的token')

# 获取股票日线数据
df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231')
print(df.head())

跑一下,数据就出来了。是不是很简单?

小提示: 我刚开始用的时候,经常忘记设置 start_date,结果拉回来一堆历史数据,处理起来慢得要死。建议每次都明确指定起止日期。

4.2 数据清洗与预处理

拿到的数据,说白了就是原材料。直接拿来用?不行。你得先洗一洗。

常见问题:

  • 缺失值:某天停牌,数据是 NaN
  • 异常值:价格突然跳空,可能是数据错误
  • 重复值:同一时间戳出现多条记录

我在项目中遇到过最坑的一次:某只股票因为分红除权,价格直接跳了20%。我没处理,直接跑回测,结果策略显示年化收益300%...后来才发现是数据没复权。

# 处理缺失值:向前填充
df.fillna(method='ffill', inplace=True)

# 处理重复值
df.drop_duplicates(subset=['trade_date'], keep='last', inplace=True)

# 复权处理(推荐使用后复权)
df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231', adj='qfq')
避坑指南: 我曾经因为没做复权处理,导致回测结果完全失真。记住:股票分红、送股都会影响价格连续性。一定要用复权数据!

4.3 数据存储:CSV vs HDF5

数据洗好了,得存起来。两种主流方式:CSV 和 HDF5。

特性 CSV HDF5
可读性 高(文本文件,直接打开看) 低(二进制文件)
存储效率 低(占用空间大) 高(压缩存储)
读写速度 慢(尤其数据量大时) 快(支持索引)
适用场景 小数据量、调试阶段 大数据量、生产环境

我个人习惯:调试用 CSV,正式跑用 HDF5。为什么?CSV 方便查看,HDF5 性能好。

# 存储为 CSV
df.to_csv('stock_data.csv', index=False)

# 存储为 HDF5
df.to_hdf('stock_data.h5', key='daily_data', mode='w')

# 读取 HDF5
df_loaded = pd.read_hdf('stock_data.h5', key='daily_data')
核心建议: 如果你每天拉数据,建议用 HDF5 追加模式。我自己的系统就是每天定时跑,把新数据 append 到同一个 HDF5 文件里,省空间又高效。

4.4 本章知识体系

下面这张图,帮你理清整个流程:

金融数据获取流程 1. 数据获取 Tushare API 2. 数据清洗 缺失值/异常值/复权 3. 数据存储 CSV / HDF5 关键注意事项 • 获取数据时:指定起止日期,避免拉取过多无用数据 • 清洗数据时:务必做复权处理,否则回测结果失真 • 存储数据时:小数据用CSV方便调试,大数据用HDF5提升性能 • 定期检查:数据源可能更新,建议每天增量更新

说白了,整个流程就是:拿数据 → 洗干净 → 存起来。每一步都有坑,但踩过一次就记住了。

我的经验: 刚开始做量化的时候,我花了大把时间在策略上,结果数据质量不行,全白费。后来我学乖了:花 70% 的时间处理数据,30% 的时间写策略。数据对了,策略才有意义。

专注资料整理