做量化选股到底需要什么数据?先理清需求,再选数据源

很多人选数据源的过程是这样的:“搜一下 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

更多推荐