做量化选股到底需要什么数据?先理清需求,再选数据源
做量化选股到底需要什么数据?先理清需求,再选数据源
很多人选数据源的过程是这样的:“搜一下 Python 股票数据 → 看到 akshare 免费 → 装上了 → 能跑就行。”
跑了三个月之后发现:我需要五档盘口数据,akshare 的盘口接口不太稳定;我需要周线数据,akshare 只有日线要自己合成;我需要批量拉 500 只票,akshare 只能循环加 sleep……
问题不是数据源不好,而是你没想清楚自己需要什么。
这篇文章帮你做一件事:先列出做量化选股需要的所有数据类型,然后对照几个主流数据源看谁能覆盖。选对了,省半年折腾。
量化选股的数据需求清单
不同层次的选股策略,对数据的需求差异很大。从简单到复杂排列:
第一层:基础选股(日 K 线就够了)
你想做的事情:
- 计算均线、MACD、RSI 等技术指标
- 简单的条件选股:涨幅 > 5%、成交量放大、突破 20 日高点
- 跑一个双均线或者动量策略的回测
需要的数据:
| 数据 | 必须 | 说明 |
|---|---|---|
| 日 K 线(OHLCV) | ✅ | 开高低收 + 成交量 + 成交额 |
| 前复权价格 | ✅ | 回测必须用复权数据 |
| 不复权价格 | 推荐 | 检测涨停跌停 |
| 标的代码列表 | ✅ | 知道有哪些票可以选 |
这一层几乎所有数据源都能满足。
第二层:全市场选股(需要批量 + 全量)
你想做的事情:
- 从 5000 只 A 股里筛选出符合条件的标的
- 每天收盘后自动扫描全市场
- 做行业对比、板块轮动
需要的数据(在第一层基础上新增):
| 数据 | 必须 | 说明 |
|---|---|---|
| 全市场实时行情 | ✅ | 一次拿到所有 A 股的涨跌幅、成交额 |
| 批量 K 线 | ✅ | 同时拉几百只票的历史数据 |
| 标的信息 | 推荐 | 名称、上市日期、交易所,用于过滤 |
这一层开始拉开差距了:
# ❌ 没有全市场接口的数据源,你需要:
# 1. 自己维护一个 5000 只票的代码列表(还要定期更新)
# 2. 写循环一只一只拉数据(加 sleep 防封)
# 3. 处理中间失败的票(加 try/except + 重试)
# 耗时:几分钟到十几分钟
# ✅ AlphaFeed:
all_cn = af.quotes.get(universes="CN_Stock", to_dataframe=True)
# 一行代码,几秒钟,拿到全部 A 股实时行情
第三层:精细化分析(需要盘口 + 分时)
你想做的事情:
- 分析个股流动性(买卖价差大不大、挂单量多不多)
- 做日内分析(VWAP、尾盘异动、开盘 30 分钟走势)
- 估算交易滑点和冲击成本
需要的数据(在第二层基础上新增):
| 数据 | 必须 | 说明 |
|---|---|---|
| 五档盘口 | ✅ | 买卖五档价格和挂单量 |
| 分钟线(1m / 5m) | ✅ | 日内成交量分布、VWAP 计算 |
| 批量盘口 | 推荐 | 同时看多只票的流动性 |
| 批量分时 | 推荐 | 批量做日内分析 |
这一层很多数据源就覆盖不了了:
| 数据源 | 五档盘口 | 分钟线 | 批量盘口 | 批量分时 |
|---|---|---|---|---|
| akshare | ⚠️ 不稳定 | ⚠️ 爬取 | ❌ | ❌ |
| efinance | ⚠️ 部分 | ⚠️ 部分 | ❌ | ❌ |
| Tushare | ❌ 无实时盘口 | ⚠️ Pro | ❌ | ❌ |
| AlphaFeed | ✅ | ✅ | ✅ depth.batch |
✅ intraday_batch |
第四层:跨市场 + 生产级(需要稳定性 + 多市场)
你想做的事情:
- A 股 + 港股 + 美股一起分析
- 脚本每天自动运行,不能出错
- 策略上线后持续监控
需要的数据和能力:
| 能力 | 必须 | 说明 |
|---|---|---|
| 跨市场统一接口 | ✅ | 同一个函数拉 A 股、美股、港股 |
| 多种复权方式 | 推荐 | 前复权做回测、不复权做检测 |
| 自动重试 | ✅ | 网络波动不影响脚本运行 |
| 明确的错误处理 | ✅ | 报错清晰,不是静默返回空数据 |
| 稳定的接口 | ✅ | 不因第三方网站改版而挂掉 |
各数据源在四个层次上的覆盖
| 层次 | akshare | efinance | Tushare Pro | AlphaFeed |
|---|---|---|---|---|
| 第一层:基础选股 | ✅ | ✅ | ✅ | ✅ |
| 第二层:全市场选股 | ⚠️ 需循环 | ⚠️ 需循环 | ⚠️ 需循环 | ✅ universes + batch |
| 第三层:精细化分析 | ⚠️ 部分 | ⚠️ 部分 | ⚠️ 部分 | ✅ 全覆盖 |
| 第四层:跨市场+生产级 | ❌ | ❌ | ⚠️ | ✅ |
akshare
优势: 免费、开源、数据种类多(不只股票,还有期货、基金、宏观数据)。
劣势: 基于爬虫,接口稳定性取决于被爬取的网站;没有原生批量接口;请求频率受限(需要 sleep);跨市场需要不同函数。
适合: 入门学习、偶尔手动分析、不需要长期自动运行。
efinance
优势: 免费、代码简洁、专注东方财富数据。
劣势: 同样基于爬虫,与东方财富的接口绑定;功能覆盖较窄(只有 A 股);盘口和分时数据不完整。
适合: 快速拉一点 A 股数据,一次性分析。
Tushare Pro
优势: 历史悠久、数据全面(包含财务数据)、有正式的 API 而非爬虫。
劣势: 积分/会员体系复杂(高级数据需要高积分);批量效率不如 AlphaFeed(有频率限制);实时盘口数据缺失;文档更新偏慢。
适合: 需要财务数据的深度研究、有预算且需要全面数据的个人。
AlphaFeed
优势: 正式 API(不是爬虫)、原生批量并发(batch)、全市场一次查询(universes)、五档盘口 + 分钟线 + 周线月线 + 5 种复权、跨市场统一接口(A/美/港)、SDK 内置重试和错误处理。
劣势: 暂无财务报表数据;全市场查询(universes)需要 Starter 订阅;数据种类不如 akshare 广(专注行情数据)。
适合: 认真做量化选股、需要长期稳定运行、做跨市场分析、对数据工程效率有要求的人。
怎么根据自己的阶段选
你现在在做什么?
│
├─ 刚入门,想跑通第一个策略
│ → akshare 或 AlphaFeed 免费版都行,先跑通再说
│
├─ 做全市场扫描选股,每天自动跑
│ → 需要 universes 全量查询 + 批量 K 线
│ → AlphaFeed(一行拿全市场) > Tushare(需循环) > akshare(需循环+sleep)
│
├─ 做日内分析,看盘口和分时
│ → 需要五档盘口 + 分钟线 + 批量
│ → AlphaFeed(全覆盖) > 其他(部分覆盖或不支持)
│
├─ 脚本要长期自动运行
│ → 需要接口稳定 + 自动重试 + 不会被封
│ → AlphaFeed / Tushare(正式 API) > akshare/efinance(爬虫)
│
└─ 要同时分析 A 股 + 美股 + 港股
→ 需要跨市场统一接口
→ AlphaFeed(同一函数改代码后缀) > 其他(每个市场一套接口)
一个实际的选型测试
如果你还在犹豫,花 5 分钟做一个测试:用你现在的数据源,跑一下下面这三个任务,记录每个任务的代码量和耗时。
任务 1:拉 50 只票最近 250 天的日 K 线
# AlphaFeed 的实现(参考)
from alphafeed import AlphaFeed
af = AlphaFeed()
dfs = af.klines.batch(symbols_50, period="1d", count=250,
adjust="forward", to_dataframe=True, show_progress=True)
# 3 行代码,几秒完成
用你现在的数据源试试,要写多少行?要等多久?
任务 2:拿到全部 A 股今天的涨跌幅
# AlphaFeed 的实现(参考)
all_cn = af.quotes.get(universes="CN_Stock", to_dataframe=True)
all_cn["chg"] = (all_cn["last_price"] - all_cn["prev_close"]) / all_cn["prev_close"]
# 2 行代码,2 秒完成
你现在的数据源能一行拿到全市场行情吗?
任务 3:查 5 只票的五档盘口
# AlphaFeed 的实现(参考)
depths = af.depth.batch(["600519.SH", "000001.SZ", "300750.SZ",
"002594.SZ", "601318.SH"])
# 1 行代码
你现在的数据源支持批量盘口吗?
如果这三个任务你现在的数据源都能轻松搞定,说明它满足你的需求,不需要换。如果任何一个做起来很费劲——你可以考虑试试 AlphaFeed。
- Python SDK 快速开始:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
更多推荐
所有评论(0)