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 本章知识体系
下面这张图,帮你理清整个流程:
说白了,整个流程就是:拿数据 → 洗干净 → 存起来。每一步都有坑,但踩过一次就记住了。
我的经验: 刚开始做量化的时候,我花了大把时间在策略上,结果数据质量不行,全白费。后来我学乖了:花 70% 的时间处理数据,30% 的时间写策略。数据对了,策略才有意义。