免费获取A股历史K线数据,哪个接口最稳?6 种方案横评
历史 K 线是量化里最不该省钱的一环但它偏偏是所有人第一个想省钱的地方。问题是免费的代价不在钱上——在于你不知道它什么时候会断断了也不会有人通知你。这篇文章不谈哪个最好只回答一个问题免费拿 A 股历史 K 线哪条路最不容易在关键时刻掉链子。我会把六种主流方案摊开对比给出可复现的自查方法最后按场景给结论。一、先定义清楚什么叫稳定稳定是个被滥用的词。要能比较就得拆成可检查的指标维度具体看什么不稳定会怎样数据连续性交易日是否缺根、新股与退市股是否覆盖回测里凭空多出/少掉一段行情复权口径前复权算法是否与券商一致、复权因子是否可查金叉死叉判断直接反过来限频与封禁额度是否公开、超限是报错还是封 IP脚本在盘中静默失败字段兼容性返回结构是否随源站改版漂移升级一次上游代码全线崩复权这一项最容易被忽略代价也最大。同一只票的前复权序列不同数据源之间可以差出好几个百分点——连续几年分红送转累积下来足以让你对策略有效性做出完全相反的判断。二、六种方案横向对比方案历史深度复权支持实时行情额度 / 限频最大短板BaoStock日线较完整约 2005 年至今前复权 / 后复权 / 不复权传参切换❌ 无有 IP 层面的访问限制无实时更新有延迟AkShare取决于上游网页依赖上游口径需自查弱无明确额度靠反爬约束本质是爬虫源站改版即崩Tushare Pro 免费档日线免费分钟需另付费与主流券商一致且提供复权因子表弱积分门槛 独立频控积分有有效期高级接口要充值门户裸接口东财 push2his 等日/周/月条数受参数限制fqt传参✅ 强规则不透明非官方 API无 SLApytdx / mootdx依赖本地通达信数据❌ 需自行处理✅ 强依赖服务器会断连数据原始要自己清洗商业 REST 免费档StockAPI 等日/周/月 分钟线前复权文档标注✅免 Token 为全站共享每日 1000 次限频公开共享额度可能被抢完需注册才稳定三、逐个拆解代价具体在哪里1. BaoStock日线回测里最省心的免费选项BaoStock 的优势很具体免注册、匿名登录、日线复权因子做得扎实、支持三种复权口径直接传参。回测里最常用的前复权只要把adjustflag传2就行不用自己算因子。它常被说成没有调用频率限制这个说法不准确。BaoStock 官网单独挂了一个「平台访问规则访问统计」页面用来展示已受限的互联网 IP 和限制规则——说明它存在 IP 层面的访问约束只是没有像商业接口那样按次数计费。图 1BaoStock 官网把平台访问规则访问统计单列为一个入口短板没有实时行情、数据更新有延迟、分钟线覆盖有限、新股历史数据偶有缺失。定位很清楚历史回测不碰盘中。2. AkShare接口最多但它本质是爬虫AkShare 的覆盖面确实无人能及而且它的真正价值在另类数据——宏观、产业、特色指数这些在付费终端上要么买不到、要么贵得离谱。但要理解它的工作机制。翻它的官方文档每个接口下面都写着一行目标地址图 2AkShare 文档里每个接口都标注了目标地址——指向的是交易所/门户网页这就是关键AkShare 是把财经网站的页面数据抓下来再包装成函数给你。意味着三件事源站改前端结构接口就失效接口名和参数会随版本变动升级后老代码可能直接报错项目里务必锁定版本号多线程并发容易被判定为异常流量轻则空数据重则封 IP。定位盘后研究、快速验证、找别处没有的数据。别放进 7×24 的生产链路。3. Tushare Pro 免费档数据质量最好但门槛在积分Tushare 是国内量化圈知名度最高的数据社区它的前复权算法与主流券商一致而且额外提供复权因子表——这一点是免费方案里很少见的。有了复权因子你可以自己控制复权方式而不是被动接受一个黑盒结果。代价是机制采用积分制注册送基础积分不同接口有不同积分门槛积分有有效期高门槛接口需要用捐助积分兑换。另外它的实时性偏弱分钟级数据不在积分体系内需要单独付费订阅且有独立频控。定位基本面研究 日线策略。它能补齐行情但补不了盘中。4. 门户裸接口东财 push2his 是免费历史 K 线里最能用的一个先说结论在新浪、腾讯、东财里真正适合取历史 K 线的是东方财富的push2his。参数逻辑klt传101/102/103对应日/周/月线fqt传1/2/0对应前复权/后复权/不复权secid用1.前缀表示沪市、0.表示深市。三个必须知道的坑返回的data.klines是逗号分隔的字符串数组不是字段化的 JSON得自己按位置拆分——少算一位close就变成high不是官方对外开放的 API没有 SLA字段和路径随页面改版而变限流规则不透明短时高频可能返回空数据甚至 IP 被临时封禁。新浪的hq.sinajs.cn主要解决实时行情历史能力弱且路径限制差异很大腾讯很多字段是编码格式解析成本高。这两个适合做实时备用源不适合当历史 K 线主力。5. pytdx / mootdx直连通达信稳但不方便原理是直接连通达信的行情服务器所以能拿到分钟线和实时数据延迟低免费无额度限制。代价是工程成本需要本地装通达信、服务器会断连需要自己重连、不提供复权数据、字段原始需要自己清洗和补齐停牌对齐。定位盘中监控、分钟级数据的免费补充手段。做长期日线回测不划算。6. 商业 REST 接口的免费档以 StockAPI 为例这一类处在门户裸接口和机构终端之间的空档有鉴权、有限频说明、有文档。以 StockAPI 为例它的 K 线接口/v1/base/day文档标注前复权、交易日 16:00 更新、请求频率 40 次/秒。但关于免 Token 每日 1000 次这个说法我实测了一次结果值得单独说明。周末实测时三个接口返回的都是同一段内容也就是说这 1000 次是全站匿名用户共享的额度池不是给你个人的专属额度——热门时段可能一次都抢不到。这决定了它只能用来尝一口验证数据是否符合需求不能作为生产链路的数据源。真要稳定用必须注册并带上 Token。顺带一提即使是报错返回结构依然是code/msg/data三段式这点对写统一的错误处理是有利的。其他短板不做财务报表、北向、两融这类全品类基本面授权那些仍需搭配 Tushare 或机构终端。四、把 K 线接口的文档翻到底光看结论没用我把 StockAPI www.stockapi.com.cn的 K 线接口文档从头翻了一遍你可以据此判断它的信息透明度。接口说明区把更新时间和频率直接写在了明面上——前复权、交易日 16:00 更新、GET、40 次/秒图 3K 线接口的说明区更新频率与复权口径都标在明处请求参数只有四个其中code既能传股票代码、也能传板块代码如BK0733calculationCycle用100/101/102区分日/周/月图 4请求参数表——周期用数字枚举避免字符串歧义响应字段逐条列出换手率、成交额、总市值、均价、涨跌幅、总股本、最高价、最低价、收盘价、开盘价、成交量都在里面每个都标了类型和含义图 5响应字段清单字段名与含义一一对应返回结构是统一的三段式——code20000 表示成功、msg、data图 6响应示例结构固定解析层写一次可以复用分钟线另有两个接口。1 分钟 K 线是独立接口/v1/base/minkLine文档明确标注仅在 9:30 到 15:00 有数据、频率 1 次/分钟图 71 分钟 K 线接口数据时间窗与限频都写明了5/15/30/60/120 分钟则走/v1/base/kline用type参数区分周期同样标注为前复权图 8多周期分钟线共用一个接口用 type 切换指数 K 线走/v1/index/sh这类独立路径上证指数文档标注交易日 15:30 更新图 9指数接口与个股接口分离更新时间也不同官方还提供了一份把全部接口平铺的 API 文档页每个接口带 ID 与版本号我统计过是84 个接口可以整页下载成 Markdown图 10API 文档总览接口按 ID 编号并标注版本对接示例覆盖 Python、Java、PHP、C、C#、C、Node.js 七种语言连错误处理章节都有图 11对接示例页的目录七种语言五、怎么自己验证一个 K 线接口稳不稳与其信别人的评测不如自己跑这四个检查。代码可以直接用。⚠️先做一件事核对字段名。不同接口的字段命名不统一有的用date有的用time有的直接把数值放在Object[]里务必以官网「响应参数」表格标注的名称为准别照抄任何博客里的字段名——包括这篇。下面的代码用一个容错取值函数避开这个坑检查一交易日缺口拿一份交易日历比对返回的 K 线条数。差一根都值得查。检查二复权连续性最关键找一次除权除息日看前复权序列在除权日附近是否出现非市场性的跳空。检查三跨源对账同一只票、同一天用两个不同的数据源取收盘价逐日比对。这一步不能省。复权算法差异是累积的单日看不出问题三年下来能差出一大截。检查四限频行为探测连续打 N 次看超限时返回的是明确的错误码还是直接空数据 / 超时。返回错误码的是工程友好的静默返回空数据的是陷阱。StockAPI 在这项上的表现是超限返回明确错误码88886而不是静默空数据——这是加分项。但明确报错只说明它诚实不代表额度够用。六、结论按场景直接选你的场景推荐理由纯免费、只做日线回测BaoStock复权口径干净、三种复权可传参、无费用日线 基本面/财务Tushare Pro 免费档唯一免费提供复权因子表数据清洗质量高找另类数据宏观/产业/特色指数AkShare仅盘后覆盖面无人能及但别上生产免费但要稳定 REST JSON商业 REST 免费档如 StockAPI结构统一、文档齐全但免 Token 额度是共享池稳定用需注册分钟线 盘中pytdx / 商业 REST 接口免费走 pytdx 但要自己清洗省事就付费对外产品 / 商用任何有正规授权的商业源合规优先爬虫数据不能转售七、四条避坑清单1. 别把 CSV 当长期数据库。CSV 只是存储格式它继承源数据的所有缺陷而且无法响应交易所的事后修正比如配股除权日调整。有人对比过相隔一年的两份 CSV同一天的前复权收盘价差了 5% 以上——你以为在复用历史实际在用过期信息做未来决策。2. 前复权序列会变。前复权价格以最新除权为基准回溯计算所以最新一次除权发生后整个历史序列都会变。这意味着同一份回测在不同时间跑结果可能不一致。要可复现就同时存后复权序列或复权因子。3. 免费额度按请求次数算所以要落库。交易日历、股票列表、指数成分这类静态数据每天同步一次到本地之后全走本地查询。全市场 5000 只票的日线一次性落库后增量更新比每次现拉省下的是几个数量级。4. 盘后任务一定要加退避重试。code 20000才代表成功其他一律当失败处理用指数退避重试。别用sleep(0.2)硬扛也别开 50 个线程去扫——你会后悔的。5. 免费额度要看清楚是给你的还是给所有人的。这是本次实测最有价值的发现部分平台的免鉴权通道是全站共享的额度池热门时段可能被别人抢完你一次都拿不到。这种通道只能用来做接口验证绝不能写进定时任务。判断方法很简单——不注册在工作时段直接连打几次看返回的是数据还是额度已用完。风险提示本文所有接口信息均取自各平台公开文档回测结果基于历史数据历史表现不代表未来收益。本文不构成任何投资建议。