策略跑不通,很多时候不是逻辑写错了,而是数据源在背后捅了一刀——开盘那五分钟接口返回空数据,或者一次送股没做对复权,回测曲线和实盘就彻底对不上。
这篇文章不谈玄学,只解决一个问题:在国内做和股票相关的行情系统,数据 API 到底该怎么挑。我会把市面上几条主流路线摊开讲清楚各自的真实代价,再用 StockAPI 作为商业 REST 接口的一个样本,带你把接口文档从里到外看一遍。
一、为什么"选数据源"比"写策略"更容易翻车
先说三个真实的坑。
坑一:接口没有 SLA,说变就变。新浪、腾讯、东方财富这些门户的行情接口,本质上不是正式对外的 API,而是自家网页在看的数据地址。它们没有服务等级承诺,改字段、加校验、换路径都不会通知你。上个月跑得好好的脚本,下个月集体 403。
坑二:限流规则不透明。你多开几个线程轮询 5000 只股票,轻则返回空数据,重则 IP 进小黑屋。而且封多久、怎么解封,没人告诉你。
坑三:复权口径不一致。这是最阴的。同一只票的日线,前复权、后复权、不复权三套数据能算出完全相反的金叉。免费源里复权因子出错是常有的事,回测赚 30%,实盘可能亏 5%——差的不是策略,是数据。
所以选数据源的第一原则不是"哪个数据最全",而是:先定义你的场景,再匹配方案的稳定性等级。
二、一张表看清国内主流行情数据 API 的路线
路线 | 代表方案 | 费用 | 实时性 | 数据完整度 | 稳定性 | 适合谁 |
免费开源聚合库 | AkShare、BaoStock | 0 元 | 弱(多为 T-1 或秒级波动) | 品种广,口径需自查 | 中低,依赖源站 | 学习、临时研究 |
门户裸接口 | 新浪 | 0 元 | 强 | 以行情为主 | 中,无 SLA | 轻量报价、盘中盯盘 |
社区积分制平台 | Tushare Pro | 免费额度 + 积分/付费 | 较弱 | 极全(财报/龙虎榜/北向/两融) | 高 | 基本面研究、日线策略 |
平台内置数据 | 聚宽、米筐 | 免费额度 + 订阅 | 强 | 全 | 高 | 在平台内做策略研究 |
商业 REST 接口 | StockAPI 等 | 免费额度 + 套餐 | 强 | 行情为主 + 特色数据 | 高(有鉴权、有额度说明) | 自建系统、财经 App、内部投研 |
机构终端 | Wind、Choice、iFinD | 数千至数万元/年 | 强 | 最全 | 最高 | 机构、预算充足的团队 |
交易所/券商通道 | 券商 QMT/Ptrade、L2 行情网关 | 需开户/机构资质 | 最强(Tick 级) | 最强 | 最高 | 高频、实盘交易 |
价格一栏是公开资料口径,各家每年都可能调整,下单前请以官网当期报价为准。
三、逐条拆解:每一类的代价在哪里
1. 免费开源库:省的是钱,花的是时间
AkShare是使用门槛最低的选择——不用注册、不用 Token,pip install akshare就能拉数据,而且它的真正价值藏在"另类数据"里:宏观、产业、特色指数这些在付费终端上要么买不到、要么贵得离谱的数据,它几乎都有。
但它本质是一个爬虫集合,没有中心化数据库。意味着:源站改版它就崩,反爬升级它就慢,多线程并发它会封你 IP。适合盘后做研究,不适合 7×24 跑生产。
BaoStock更"专一":只做 A 股,历史 K 线和复权因子做得很扎实,退市股也相对完整,而且免费、无需注册。代价是没有实时行情,数据也有更新延迟。
结论:学习阶段和日线级回测用这两个完全够。但别把它们放进生产链路。
2. 门户裸接口:快,但你在和别人的反爬长期对抗
http://hq.sinajs.cn/list=sh600519这类地址拼一下就能拿到数据,国内访问延迟极低,不要 Key、不用注册,特别适合做"现在这票多少钱"的轻量查询。
代价也很明确:
- 返回的是竖线分隔的文本串,不是结构化 JSON,字段位置数错一位就全乱;
- 新浪已全面转向 HTTPS 并校验 Referer 与 User-Agent;
- 部分接口的延迟并不像传说中那么低,实测有到 2 分钟以上的情况;
- 没有 SLA,说关就关。
个人、低频、临时用没问题;对外产品里嵌这种数据,成本和合规风险都会找上门。
3. 社区积分制平台:Tushare Pro
Tushare 是国内量化圈知名度最高的数据社区,文档完善、学术引用多,基本面数据的清洗质量是它的护城河——财报、分红、龙虎榜、北向资金这类数据,免费方案里确实找不到替代品。
它的机制是积分制:注册送基础积分,调用不同接口需要不同积分门槛(比如基础日线接口大概 120 分即可),积分有有效期,高门槛接口需要用捐助积分兑换。
两个容易被低估的点:
- 实时性偏弱,它更擅长"盘后"而不是"盘中";
- 分钟级数据不在积分体系里,需要单独付费订阅,而且还有独立的频控。
结论:做基本面研究和日线策略,它依然是性价比很高的搭档。但如果你要的是盘中实时监控,它补不上这个位。
4. 机构终端:Wind / Choice / iFinD
这三家是行业标准级的存在,数据质量和更新速度都没话说,而且有正规的授权和发票,商用没有合规顾虑。
门槛只有一个字:贵。公开口径大致是 Choice 每年几千元、iFinD 每年数千到两万、Wind 每年三万起步。个人开发者基本不用考虑,除非你的策略规模已经大到数据成本可以忽略。
5. 商业 REST 接口:以 StockAPI 为样本
这一类是夹在"免费裸接口"和"机构终端"之间的空档:有鉴权、有额度说明、有文档,价格对个人友好,但不做全品类。
StockAPI(官网https://www.stockapi.com.cn/)就是这条路线上的一个样本。它提供 RESTful 的 JSON 接口,用 Token 鉴权,也保留了一档免 Token 的普通请求(每日 1000 次)。下面我直接带你过一遍它的文档。
四、实测:StockAPI 的接口文档长什么样
4.1 接口清单:84 个接口,每个带 ID 和版本号
官网的「API 接口文档」页把全部接口摊在同一个长页面里,每个接口都有 ID、版本号、接口地址和完整的参数表,右侧还能一键下载 Markdown。
我实际抓取统计了一遍:该页面共列出 84 个接口,ID 编号排到 92。
图 1:API 接口文档页,每个接口都有独立 ID 与版本号
按功能归类,覆盖范围大致是这样:
分类 | 代表性接口 | 说明 |
基础数据 | A股列表 | 建议本地留存,A股列表每日调用 2 次即可 |
K 线行情 | 股票/板块 日、周、月 K 线 | 数据为前复权,交易日 16:00 更新 |
实时数据 | 1 分钟 K 线、5/15/30 分钟 K 线、逐笔明细、分时成交量 | 盘中实时 |
盘口数据 | 实时五档委托单 | 9:25–15:00 有数据 |
技术指标 | MACD、KDJ、RSI、WR、BIAS、BOLL、CCI、MA、神奇九转 | 日/周/月周期可传参 |
指数与基金 | 指数代码、上证指数、深证成指、创业板指、沪深300、ETF、基金列表 | — |
涨跌停与股池 | 涨停/跌停/炸板/强势股/次新股池、全量异动数据 | 打板类策略常用 |
资金与游资 | 个股资金流向、板块概念资金流、龙虎榜、游资上榜交割单、人气榜 | 特色数据 |
竞价数据 | 早盘抢筹、尾盘抢筹、热点板块竞价、竞价一字板 | 9:26 与 15:10 更新 |
其他 | 融资融券历史、业绩公告、大股东减持、解禁、风险监控 | — |
4.2 一个接口文档的完整结构
以日 K 线接口为例,文档把「接口说明 → 请求参数 → 请求 URL 示例 → 响应参数 → 响应示例」一次性列全,不需要来回切页。
图 2:/v1/base/day的请求参数——code 支持传股票代码,也支持传板块代码(如 BK0733),calculationCycle用 100/101/102 区分日/周/月
响应部分同样是清单式的,涨跌幅、换手率、成交额、总市值这些字段都直接给了说明:
图 3:响应参数逐字段列出,返回结构统一为code/msg/data
这个统一结构很重要:所有接口都返回code(20000 表示成功)、msg、data三段式,意味着你的解析层只需要写一次,后面接几十个接口都能复用。
4.3 实时与特色数据
盘口类的接口会明确标注数据时间窗和限频,这点比较务实——/v1/base/wudang直接写明"仅在 9:25 至 15:00 有数据"、请求频率 10 次/秒,不会让你在非交易时段白白踩坑。
图 4:实时五档委托单接口的说明区
技术指标类接口支持传周期参数(calculationCycle)和指标自身的计算参数,比如 KDJ 可以自定义cycle/cycle1/cycle2:
图 5:KDJ 指标接口,周期与参数均可传
资金流向这类特色数据接口则带上了分页参数(pageNo/pageSize),适合批量拉取历史:
图 6:个股资金流向历史接口,带分页控制
4.4 接入成本:多语言示例直接给到
官网的对接 Demo 页把 Python、Java、PHP、C++、C#、C、Node.js 七种语言的示例代码都列了出来,还有完整请求 URL、注意事项和错误处理章节。
图 7:对接示例页的目录导航,覆盖七种语言
首页给出的最小可用示例也只有几行,REST 风格,没有任何 SDK 依赖:
五、从 Token 到第一行代码:Python 接入实操
Step 1:拿 Token
注册账号后在用户中心获取 Token。如果不带 Token,也可以用"普通请求 URL",额度是每日 1000 次——这个额度用来验证接口是否满足需求是够的。
Step 2:先用 curl 确认通路
返回结构是统一的三段式:
Step 3:封装一个带重试和限频的客户端
裸调requests.get在盘中最容易翻车。下面这个封装做了三件事:统一解包code/msg/data、按接口限频做节流、失败退避重试。
六、选型建议:按场景直接给结论
你的场景 | 推荐组合 | 理由 |
学生 / 纯学习 | AkShare + BaoStock | 零成本,够跑通全流程 |
个人日线级回测 | BaoStock(历史)+ Tushare Pro(财务) | 复权因子扎实,基本面完整 |
个人做盘中监控工具 | 商业 REST 接口(如 StockAPI) | 需鉴权和额度保障,避免封 IP |
打板 / 题材短线 | 商业 REST 接口 + 涨停股池/竞价数据 | 特色数据决定策略上限 |
学术研究 / 论文引用 | Tushare Pro | 社区大、引用多、口径可溯源 |
对外产品 / 商用 | 商业 REST 接口 或 Choice / iFinD | 需要正规授权与发票 |
高频 / 日内实盘 | 券商 QMT / Ptrade + L2 行情通道 | 只有交易所授权通道能满足延迟要求 |
一句话版本:免费方案解决"能不能拿到",商业方案解决"能不能一直拿到"。当你开始为数据断流焦虑的时候,就是该付费的时候了。
七、三条避坑清单
1. 别把爬虫放进生产链路。个人非商用、低频、临时研究可以用爬虫;一旦上线 7×24 程序或对外提供数据,就要换成有鉴权和商用条款的正规源。你在和别人的反爬长期对抗,这场仗赢不了。
2. 回测前先核对复权口径。确认数据源是否包含退市股、是否标注前复权/后复权。送股、配股、分红这些事件的处理方式不同,回测结论可能完全反过来。
3. 别只看"数据全不全",先看"接口稳不稳"。一个只有 84 个接口但每个都有明确说明、有额度、有更新时间的平台,通常比一个号称上千接口、但每个都随时可能失效的聚合库更适合做工程。
风险提示:本文所有接口信息均取自各平台公开文档,接入前请以官网当期说明为准。回测结果基于历史数据,历史表现不代表未来收益。本文不构成任何投资建议。