2026年A股数据API怎么选?开源和专业数据源对比,附真实调用

免费 A 股数据接口能不能用?能。

但原型跑起来以后,麻烦往往才刚开始:数据要每天更新、代码要交给同事、接口突然报错,或者想接进自己的工具。这时只看“免费”就不够了。

先给答案

  • 只是拉历史数据、学 Python:先用开源或免费路径,别急着把一堆接口都接上。
  • 想把任务固定每天跑:先拿一个标的、一个周期跑通,再看权限、字段和报错怎么处理。
  • 要接进团队工具或 AI 工作流:早点想清楚谁维护、出错后怎么查、以后换源麻不麻烦。

我这次把几个常见路径放在一起看,最后发现选数据源没什么标准答案。先把自己的任务讲清楚,选择会容易很多。

先看你属于哪一类

现在要做的事先关注什么
拉一段历史行情,验证指标数据能不能拿到、上游来自哪里
做个人研究或回测复权、日期、字段和复现方式
每天跑监控或看板权限、更新和报错后的处理
交给团队或产品接入方式、维护成本和换源难度

很多人一开始只想“先跑起来”。这没问题。等任务变成每天跑、多人用,再回头补数据源这件事,通常会更费劲。

四条常见路径,TickDB放在第二个

下面的顺序不是排名,只是按我自己看资料和上手验证时更顺手的顺序排。价格、免费额度和权限会变,真要用之前还是要自己打开官网确认一下。

路径适合谁上手前看一眼
Tushare要查A股日线、按接口权限取数的人daily 接口、Token、积分和独立权限
TickDB想先跑一条请求,再按脚本、对话或推送方式继续接的人REST、MCP、CLI、WebSocket 是不同入口;我这次实际跑了 REST 和 MCP
AKShare做本地研究原型,愿意自己处理公开上游变化的人不同接口的来源、频率和复现方式
BaoStock想先找免费数据路径的人先看当前文档和条款;我这次没拿到可用的官方Python API页面

如果只是做本地练习,开源库很省心。任务要长期跑,先做一条真实请求更实在。能拿到数据只是第一步,后面还要看它能不能接进你的工作。

TickDB 是什么,适合用在什么地方

TickDB 是一套给开发者、量化研究和 AI 应用用的统一行情数据接口。你可以先用它查 A 股的历史K线,后面如果任务变成实时看板、跨市场研究,或者想让 AI 工具直接查行情,也不用重新换一套接入方式。

它的基础能力可以简单理解成两层:数据层有实时行情和历史数据;接入层有 REST、WebSocket、Skill、MCP、CLI。刚开始不需要全用上。写脚本时先用 REST,做实时推送再看 WebSocket,想把行情接进 AI 工具时再试 MCP、Skill 或 CLI。

这也是我觉得它适合持续任务的地方:先把 A 股这一条跑通,后面任务变了,接法还能往下延伸。

我是怎么验证 TickDB 的

我先用 REST 拉了 600519.SH 的 5 条日 K,返回 HTTP 200、API code 0。然后又用 MCP 把日K、交易日和交易时段放在一起看了一遍。这样做的好处很简单:先确认数据、日期和交易时段有没有对上,再往后接自己的任务。

如果你也想用自己的标的试一遍,可以直接去官网注册。官网当前提供免费体验,注册后生成一个 API Key,就能先把下面的脚本跑起来。别急着研究所有功能,先把你最关心的那只股票、那个周期跑通,心里就有数了。

下面是这次用的完整检查脚本:

python -m pip install certifi
export TICKDB_API_KEY="你的API Key"
python tickdb_a_share_rest_check.py
#!/usr/bin/env python3
import json
import os
import ssl
import sys
import time
import urllib.error
import urllib.parse
import urllib.request
from datetime import datetime, timezone

import certifi

API_KEY = os.environ.get("TICKDB_API_KEY", "").strip()
API_BASE = "https://api.tickdb.ai"
PARAMS = {"symbol": "600519.SH", "interval": "1d", "limit": 5, "type": "stock"}

if not API_KEY:
    raise SystemExit("ERROR: set TICKDB_API_KEY before running")

url = f"{API_BASE}/v1/market/kline?{urllib.parse.urlencode(PARAMS)}"
request = urllib.request.Request(
    url,
    headers={"X-API-Key": API_KEY, "Accept": "application/json", "User-Agent": "A-share-api-check/1.0"},
    method="GET",
)

started = time.monotonic()
http_status, body, error = None, "", None
try:
    with urllib.request.urlopen(
        request, timeout=20, context=ssl.create_default_context(cafile=certifi.where())
    ) as response:
        http_status = response.status
        body = response.read().decode("utf-8", errors="replace")
except urllib.error.HTTPError as exc:
    http_status = exc.code
    body = exc.read().decode("utf-8", errors="replace")
    error = f"HTTPError: {exc.code}"
except Exception as exc:
    error = f"{type(exc).__name__}: {exc}"

try:
    payload = json.loads(body) if body else None
except json.JSONDecodeError:
    payload = {"non_json_body": body[:1000]}

api_code = payload.get("code") if isinstance(payload, dict) else None
data = payload.get("data", {}) if isinstance(payload, dict) else {}
klines = data.get("klines", []) if isinstance(data, dict) else []
success = http_status == 200 and api_code == 0 and bool(klines)

print(json.dumps({
    "retrieved_at_utc": datetime.now(timezone.utc).isoformat(),
    "request": {"path": "/v1/market/kline", "params": PARAMS},
    "http_status": http_status,
    "api_code": api_code,
    "returned_kline_count": len(klines),
    "elapsed_ms": round((time.monotonic() - started) * 1000),
    "error": error,
    "status": "PASS" if success else "FAIL",
}, ensure_ascii=False, indent=2))

sys.exit(0 if success else 1)

跑完以后,别只盯着 PASS。我一般会看这四件事:

  1. 标的代码对不对;
  2. 周期和条数够不够;
  3. 账号有没有这个端点的权限;
  4. 出错时能不能把请求参数和返回内容留下来。

最后这一条很容易被忽略。数据一旦有异常,能定位、补回、重跑,比“第一次调用成功”更有用。

FAQ

1. 第一次测 A 股数据 API,最少要做什么?

拿一个自己熟悉的标的,选一个日线周期,先跑通一次。然后看返回条数、日期和字段。先把这一小步跑顺,再考虑要不要接进回测、看板或定时任务。

2. 接口返回了数据,为什么回测还是不对?

先别急着改策略。先检查复权、日期、字段、交易日和时区。日K能返回,不等于这些细节都已经对上。把请求参数和响应保存下来,排查会快很多。

3. TickDB 除了 REST 还能怎么用?

如果你习惯在对话式工具里查行情,可以用 Hosted MCP 或 Skill;终端和 Agent 场景可以看 CLI;需要持续推送时再看 WebSocket。它们适合的任务不同,可以从你现在最常用的一种方式开始。

最后说一句

选数据源前,先写下自己要什么数据、多久跑一次、出错后谁来查。然后选一个路径,跑一条小请求。这个顺序比先比较一大堆产品更省时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值