A股历史行情数据源实测对比:akshare、tushare、东方财富、新浪该用哪个
全市场日线批量落库用 Tushare 按交易日切片最省心,单只标的补长历史用 AKShare 新浪源最稳,东方财富 push2his 并发批量抓取会被限流封禁。本文给出四个通道的覆盖范围、复权支持、频率限制实测对比,以及落库前的三步自查。
更新于 2026-08-01
先给结论。全市场日线批量落库,用 Tushare 按交易日切片拉最省心;补单只标的的长历史,AKShare 走新浪源最稳;东方财富的 push2his 接口单线程能用,一旦起并发批量抓就会被限流封禁;分钟线不管走哪家,免费口径给的时间窗都短到没法直接做研究。下面每一条都对应一次实际踩坑,也写清各自的边界。
四个名字不在同一层
AKShare 和 Tushare 是 Python 封装库,东方财富和新浪是被封装的那层原始 HTTP 接口。AKShare 的 A 股日线有两条线路,一条抓东财,一条抓新浪,选的函数不同拿到的上游就不同。这层关系搞混,就会出现「我明明换了库,怎么还是被封」的情况——换库没换上游,限流的是上游站点,不是库。
| 通道 | 覆盖与取数方式 | 复权支持 | 限流表现 | 适合场景 |
|---|---|---|---|---|
| AKShare 东财源日线 | 沪深京 A 股,单次返回指定周期、指定日期区间的日频率历史行情 | adjust 可取 qfq、hfq 或留空取不复权 | 并发批量抓取会被上游拒绝 | 补个别标的、临时查数 |
| AKShare 新浪源日线 | 单次调用返回该标的全部历史日线,返回列比东财少 | 除 qfq、hfq 外还能直接取 qfq-factor、hfq-factor 复权因子 | 同样节奏下没被拒,是我们全市场重跑的主力;但官方文档对该函数同样标注「多次获取容易封禁 IP」,没触发不等于没有限制 | 全市场历史落库 |
| Tushare Pro | 官方文档措辞是一次请求相当于提取一只股票二十余年历史,建议按交易日循环而不是按代码循环 | daily 是未复权口径,复权走复权因子接口或 pro_bar 组合 | 按积分档限频,超限直接返回拒绝而不是变慢 | 需要稳定字段口径和明确规则的长期管线 |
| 东方财富 push2his 直连 | 字段最全,涨跌幅、换手率一类衍生列上游已算好 | 由请求参数控制,与 AKShare 东财源同源 | 并发抓取被限流封禁,降并发只是推迟发作 | 低频、少量、非批量 |
| 新浪行情接口直连 | 日线历史齐全,字段偏原始 | 需要自己处理复权 | 单线程稳定 | 自建落库管线 |
东财 push2his:单线程能跑,并发就废
做全市场历史重跑时,我们最初用东方财富 push2his 起多线程拉数据。前几百只正常,之后返回开始变空,再往后整个出口 IP 被拒。降并发、加随机间隔都只是把发作时间往后推,没有改变结果。最后换成新浪接口重写取数层才跑通。代价是新浪返回的列少,涨跌幅、换手率这类字段得自己用原始价和股本算一遍,多写了几十行清洗代码。
顺带一个测量陷阱。给接口计时必须绕开本地代理。我们测自家站点的首字节时间,走本地 Clash 代理测出 3.1 秒,绕过代理直连是 146 毫秒,在源站上测是 2.5 毫秒。同一个放大效应会让你把「接口慢」的锅扣错对象,测之前先加 --noproxy '*'。
复权参数不是一个勾选框
三家都给前复权和后复权,但前复权有个性质容易被忽略:复权因子从当前时点往回推,每发生一次分红送股,全部历史价格都会重算。同一段前复权数据,半年后再取一次,数值就不一样了,基于它的回测结果不可复现。送转次数多的老票一路往回推,还可能算出负价格。
我们最后的做法是存原始未复权价加复权因子,取数时现算,并记录取数日期。AKShare 的新浪源可以直接把 qfq-factor 和 hfq-factor 当作 adjust 取值返回(官方文档列出),Tushare 有单独的复权因子接口。边界是因子表本身也会随新的分红送股更新,所以因子快照同样要带日期存,否则只是把问题挪了个地方。
复权和收益起算点属于同一类误差:算法没错,口径不同。我们量过一次,同一批信号按次日开盘到次日收盘算,平均 +0.56%;按信号日收盘起算,平均 −0.28%。差 0.84 个百分点,而且正负翻面。数据源层面的复权不一致,产生的偏差是同一量级。
频率限制:官方数字自己也对不齐
Tushare 是四家里唯一把频率写成表的。官方《积分与频次权限对应表》给的是五档:120 积分每分钟 50 次、每天 8000 次,且只能取未复权日线,其余接口调不动;2000 积分以上每分钟 200 次、每个接口每天 10 万次;5000 积分以上每分钟 500 次、常规数据无每日总量上限;10000 积分以上在此基础上解锁特色数据,特色数据每分钟 300 次;15000 积分以上特色数据无总量限制。但日线行情接口的文档页上又写着「基础积分每分钟内可调取 500 次,每次 6000 条数据」。两处口径对不上,哪个是当前实际生效值,我们未核实。工程上按最低档 50 次/分钟 做退避之后,就再没被拒过。
AKShare 不需要账号,也就没有频次表,能不能跑通完全取决于上游站点当时的策略,它的文档自己也提醒要控制调用间隔以免 IP 被限制。这是免费的代价:没有 SLA,出问题只能靠退避和换源,赶上上游改接口就得改代码。
分钟线的时间窗,和一个不划算的教训
AKShare 的东财分钟线接口文档写明,只能获取近期分时数据,其中 1 分钟数据只返回近 5 个交易日且不复权。想做日内研究,要么自己起定时任务逐日落库慢慢攒,要么付费买历史。
攒之前先想清楚值不值。我们用两年的 5 分钟数据做过一次日内实验,回归和动量两个方向都跑了,加了 DSR 惩罚和对抗验证。回归方向直接失败;动量方向通过了全部关卡,但把信号和大盘同期走势做相关性检验,得到 +0.97——它只是在换一种方式表达趋势。剔掉 45 个事件驱动交易日后依然亏损,同期买入持有反而为正。数据成本花掉了,结论是这个方向没有日内 alpha。先用日线把想法证伪一遍,再决定要不要为分钟数据付钱。
按场景选
- 全市场日线落库、要求长期可复现:Tushare 按交易日切片,复权因子单独存。付费档买到的是稳定性和写明白的限频规则。
- 单只或少量标的补长历史、临时验证一个想法:AKShare 新浪源,一次调用拿全历史,不用管账号。
- 需要涨跌幅、换手率这类上游已经算好的字段:AKShare 东财源,单线程小批量。
- 全市场并发批量抓取:不要直接打 push2his。这是我们唯一一次把出口 IP 打到被拒的通道。
- 分钟线:先确认研究本身值不值得做,再考虑落库或付费。
落库前的三步自查
- 1抽查除权日前后几天的价格,确认复权口径和你以为的一致。用不复权数据算次日收益,会把除息缺口当成一笔亏损。
- 2存原始价加复权因子,不要只存前复权价。每份快照记录取数日期和数据源名称。
- 3同一只标的用两个源各取一份对齐。只有除权日对不上,说明是复权规则差异,可以接受;非除权日也对不上,先别急着写策略,回去查数据。
边界说明:以上是 2026 年 7 到 8 月在 macOS、家庭宽带、单机环境下的实测结果。接口策略、限频规则、返回字段都可能随时调整,换成机房 IP 或多出口的结论也未必一样。文中引用的官方数字来自 Tushare 官方文档的积分与频次权限对应表、日线行情接口页,以及 AKShare 官方文档;其余数字来自我们自己的运行记录;对不上的地方已标为未核实。本文只讨论数据获取的工程问题,不涉及任何标的判断。