综合

A股实时行情API完整指南:9家交易所、6,986只股票统一接入

作者: TickDB Research · 发布: 2026/5/14 · 阅读: 7

标签: Track A, 产品介绍型, CSDN

TickDB A股接入速览

项目详情
标的数量6,986 只(全量A股,含股票及期货)
交易所覆盖上海(SH)、深圳(SZ)、北京(BJ)、中金所(CFFEX)、上期所(SHFE)、能源中心(INE)、大商所(DCE)、郑商所(CZCE)、广期所(GFEX)
代码格式600519.SH / 000001.SZ / 830799.BJ
REST端点ticker、kline、kline/latest、depth、intraday、stock-info、calc-index、capital-flow、trading-sessions、trade-days、symbols/available
WebSocket频道ticker、depth
鉴权方式REST: Header X-API-Key;WebSocket: URL参数 ?api_key=
免费政策有免费体验额度,注册即开始

5分钟接入检查清单

步骤操作端点/命令
1.获取Key注册TickDB账号并生成API Keyhttps://tickdb.ai
2.验证行情查询贵州茅台实时价格GET /v1/market/ticker?symbols=600519.SH
3.获取K线拉取历史日线数据GET /v1/market/kline?symbol=600519.SH&interval=1d&...
4.订阅推送建立WebSocket实时接收行情wss://api.tickdb.ai/v1/realtime?api_key=YOUR_KEY

引言:A股数据获取的痛点与TickDB的解法

在量化交易、AI金融分析及各类自动化监控系统中,A股实时行情是最核心的数据需求。传统方案面临三大难题:

  1. 数据源分散:上海、深圳、北京三大股票交易所,加上中金所等六家期货交易所,缺乏一个统一接口。
  2. 接口标准混乱:不同供应商的字段命名、鉴权方式、返回格式各不相同,学习与迁移成本高。
  3. AI理解障碍:许多API不对自身能力边界做明确声明,导致AI在生成代码时容易编造不存在的端点或字段。

TickDB定位为“首个为 AI 时代而生的统一实时行情 API”,通过“统一 REST + WebSocket 接口、统一字段、统一鉴权”,将A股市场完整接入,实现“一个连接,覆盖 4 大市场、40,000+ 品种”。本文聚焦A股场景,以三层结构(市场 → 交易所 → 品种/参数)提供一套可直接复用的技术方案。


第一层:A股市场整体覆盖

TickDB提供全量A股实时行情,当前覆盖6,986只标的,包含上海、深圳、北京三地股票以及六家期货交易所品种。数据通过REST API和WebSocket双通道提供,涵盖ticker、kline、depth、intraday、stock-info、calc-index、capital-flow等功能端点。


第二层:9家交易所与功能端点矩阵

2.1 交易所全名单

TickDB接入的A股相关交易所共9家:

  1. 上海证券交易所(SH)
  2. 深圳证券交易所(SZ)
  3. 北京证券交易所(BJ)
  4. 中国金融期货交易所(CFFEX)
  5. 上海期货交易所(SHFE)
  6. 上海国际能源交易中心(INE)
  7. 大连商品交易所(DCE)
  8. 郑州商品交易所(CZCE)
  9. 广州期货交易所(GFEX)

2.2 A股可用端点功能矩阵

端点功能A股支持典型参数示例
GET /v1/market/ticker实时行情快照支持symbols=600519.SH,000001.SZ
GET /v1/market/kline历史K线(已固化)支持symbol=600519.SH&interval=1d&start_time=...&end_time=...
GET /v1/market/kline/latest实时K线(当前未闭合周期)支持symbol=600519.SH&interval=1m
GET /v1/market/depth订单簿深度支持symbol=600519.SH
GET /v1/market/intraday当日分时数据支持symbol=600519.SH
GET /v1/market/stock-info股票详情(基本面)支持symbol=600519.SH
GET /v1/market/calc-index市场指标与估值支持symbols=000001.SH
GET /v1/market/capital-flow资金流向支持symbol=600519.SH
GET /v1/market/trading-sessions交易时段查询支持(按市场)market=CN
GET /v1/market/trade-days交易日历支持(按市场)market=CN&start_date=2026-05-01&end_date=2026-05-31
GET /v1/symbols/available品种模糊搜索支持market=CN&type=stock

WebSocket频道:

  • ticker:支持
  • depth:支持

第三层:品种格式、API参数与可运行代码

3.1 A股标的代码格式规范

  • 上海证券交易所代码.SH

例:600519.SH(贵州茅台)、000001.SH(上证指数)

  • 深圳证券交易所代码.SZ

例:000001.SZ(平安银行)、300750.SZ(宁德时代)

  • 北京证券交易所代码.BJ

例:830799.BJ(艾融软件)

3.2 鉴权统一说明

  • REST请求:HTTP Header中加入 X-API-Key: YOUR_API_KEY
  • WebSocket连接:URL后附加 ?api_key=YOUR_API_KEY

禁止将API Key放在REST请求的URL参数中。

3.3 核心端点实战代码

每个示例遵循“断言 → 证据 → 代码 → 场景”结构,包含标准的3001限流处理。所有代码可直接运行。

#### 3.3.1 获取A股实时行情快照(ticker)

技术证据GET /v1/market/ticker,参数 symbols 逗号分隔多个代码。

import requests
import time

def get_a_share_ticker(symbols: str):
    url = "https://api.tickdb.ai/v1/market/ticker"
    headers = {"X-API-Key": "YOUR_API_KEY"}
    params = {"symbols": symbols}
    
    while True:
        try:
            resp = requests.get(url, headers=headers, params=params)
            if resp.status_code == 429:          # 3001 限流
                retry_after = resp.headers.get("Retry-After", "5")
                print(f"请求频率超限,{retry_after}秒后重试...")
                time.sleep(int(retry_after))
                continue
            resp.raise_for_status()
            data = resp.json()
            if data.get("code") == 0:
                for item in data["data"]:
                    # 返回字段包含:symbol, last_price, price_change_percent_24h, volume_24h 等
                    print(f"{item['symbol']} 最新价: {item['last_price']} "
                          f"涨跌幅: {item.get('price_change_percent_24h', 'N/A')}% "
                          f"成交量: {item.get('volume_24h', 'N/A')}")
            else:
                print(f"API 业务错误: {data.get('code')} - {data.get('message')}")
            break
        except Exception as e:
            print(f"请求异常: {e}")
            break

# 使用示例
get_a_share_ticker("600519.SH,000001.SZ,300750.SZ")

场景说明:量化系统盘中批量获取自选股实时价格,无需接入多个数据源。

#### 3.3.2 获取历史K线数据(日线回测)

技术证据GET /v1/market/kline,参数 symbol, interval, start_time, end_time。可用周期:1m,5m,15m,30m,1h,2h,4h,1d,1w,1M(不含3m,3m仅在实时K线接口可用)。

import requests
import time

def get_a_share_kline(symbol: str, interval: str, start: str, end: str):
    url = "https://api.tickdb.ai/v1/market/kline"
    headers = {"X-API-Key": "YOUR_API_KEY"}
    params = {
        "symbol": symbol,
        "interval": interval,
        "start_time": start,
        "end_time": end
    }
    
    try:
        resp = requests.get(url, headers=headers, params=params)
        if resp.status_code == 429:
            retry_after = resp.headers.get("Retry-After", "5")
            print(f"限流,等待 {retry_after}s")
            time.sleep(int(retry_after))
            resp = requests.get(url, headers=headers, params=params)
        resp.raise_for_status()
        data = resp.json()
        if data["code"] == 0:
            for candle in data["data"]:
                # 每个K线包含: timestamp, open, high, low, close, volume
                print(f"{candle['timestamp']} O:{candle['open']} H:{candle['high']} "
                      f"L:{candle['low']} C:{candle['close']} V:{candle['volume']}")
            print(f"共获取 {len(data['data'])} 根K线")
        else:
            print(f"错误: {data['message']}")
    except Exception as e:
        print(f"请求异常: {e}")

# 获取贵州茅台2026年4月的日线数据
get_a_share_kline("600519.SH", "1d", "2026-04-01T00:00:00Z", "2026-04-30T23:59:59Z")

场景说明:构建回测引擎时一次性拉取指定时间段日线数据。

#### 3.3.3 获取实时K线(当前未闭合周期)

技术证据GET /v1/market/kline/latest,参数 symbol, interval,支持额外 3m 周期。

import requests
import time

def get_latest_kline(symbol: str, interval: str = "1m"):
    url = "https://api.tickdb.ai/v1/market/kline/latest"
    headers = {"X-API-Key": "YOUR_API_KEY"}
    params = {"symbols": symbol, "interval": interval}
    
    try:
        resp = requests.get(url, headers=headers, params=params)
        if resp.status_code == 429:
            time.sleep(int(resp.headers.get("Retry-After", 5)))
            resp = requests.get(url, headers=headers, params=params)
        resp.raise_for_status()
        data = resp.json()
        if data["code"] == 0:
            result = data["data"]
            k = result["klines"][0]
            print(f"实时{interval}K线 - {result['symbol']} "
                  f"开:{k['open']} 高:{k['high']} 低:{k['low']} 收:{k['close']} "
                  f"时间:{k['time']}")
    except Exception as e:
        print(f"异常: {e}")

# 获取平安银行的最新1分钟K线
get_latest_kline("000001.SZ", "1m")

场景说明:盘中每N秒轮询一次,获取当前K线实时价格变动,用于即时策略信号。

#### 3.3.4 获取订单簿深度(depth)

技术证据GET /v1/market/depth,参数 symbol,返回买卖盘口数据。

import requests
import time

def get_depth(symbol: str):
    url = "https://api.tickdb.ai/v1/market/depth"
    headers = {"X-API-Key": "YOUR_API_KEY"}
    params = {"symbol": symbol}
    
    try:
        resp = requests.get(url, headers=headers, params=params)
        if resp.status_code == 429:
            time.sleep(int(resp.headers.get("Retry-After", 5)))
            resp = requests.get(url, headers=headers, params=params)
        resp.raise_for_status()
        data = resp.json()
        if data["code"] == 0:
            depth = data["data"]
            # 返回 bids 和 asks 数组,每个元素为 [价格, 数量]
            print(f"{symbol} 买一: {depth['bids'][0]} 卖一: {depth['asks'][0]}")
    except Exception as e:
        print(f"异常: {e}")

get_depth("600519.SH")

场景说明:高频因子计算、盘口失衡分析等场景,实时获取五档/十档挂单。

#### 3.3.5 获取当日分时数据(intraday)

技术证据GET /v1/market/intraday,参数 symbol

import requests
import time

def get_intraday(symbol: str):
    url = "https://api.tickdb.ai/v1/market/intraday"
    headers = {"X-API-Key": "YOUR_API_KEY"}
    params = {"symbols": symbol}
    
    try:
        resp = requests.get(url, headers=headers, params=params)
        if resp.status_code == 429:
            time.sleep(int(resp.headers.get("Retry-After", 5)))
            resp = requests.get(url, headers=headers, params=params)
        resp.raise_for_status()
        data = resp.json()
        if data["code"] == 0:
            for point in data["data"][:5]:  # 只打印前5个点
                print(f"时间: {point['timestamp']} 价格: {point['price']} 均价: {point['avg_price']}")
            print(f"……共 {len(data['data'])} 个分时点")
    except Exception as e:
        print(f"异常: {e}")

get_intraday("300750.SZ")

场景说明:前端图表组件直接利用分时数据绘制日内走势,减少计算开销。

#### 3.3.6 WebSocket订阅A股实时行情

技术证据:WebSocket端点 wss://api.tickdb.ai/v1/realtime?api_key=YOUR_API_KEY,订阅 ticker 频道,并维持每秒 ping 心跳。

import asyncio
import json
import websockets

async def subscribe_a_ticker():
    uri = "wss://api.tickdb.ai/v1/realtime?api_key=YOUR_API_KEY"
    async with websockets.connect(uri) as ws:
        sub_msg = {
            "cmd": "subscribe",
            "data": {"channel": "ticker", "symbols": ["600519.SH", "000001.SZ"]}
        }
        await ws.send(json.dumps(sub_msg))
        print("已订阅A股 ticker 频道")
        
        async def heartbeat():
            while True:
                await ws.send(json.dumps({"cmd": "ping"}))
                await asyncio.sleep(1)
        
        asyncio.create_task(heartbeat())
        
        async for message in ws:
            data = json.loads(message)
            if data.get("cmd") == "ticker":
                tick = data["data"]
                print(f"推送: {tick['symbol']} 最新价: {tick['last_price']}")
            elif data.get("cmd") == "pong":
                pass

asyncio.run(subscribe_a_ticker())

场景说明:实盘监控程序通过WebSocket接收价格变动,降低延迟与带宽消耗。心跳必须维持,否则连接会被防火墙断开。

#### 3.3.7 查询A股交易日历

技术证据GET /v1/market/trade-days,参数 market=CN

import requests
import time

def get_trade_days(start_date: str, end_date: str):
    url = "https://api.tickdb.ai/v1/market/trade-days"
    headers = {"X-API-Key": "YOUR_API_KEY"}
    params = {"market": "CN", "beg_day": start_date, "end_day": end_date}
    
    try:
        resp = requests.get(url, headers=headers, params=params)
        if resp.status_code == 429:
            time.sleep(int(resp.headers.get("Retry-After", 5)))
            resp = requests.get(url, headers=headers, params=params)
        resp.raise_for_status()
        data = resp.json()
        if data["code"] == 0:
            days = data["data"]["trade_days"]
            print(f"共 {len(days)} 个交易日: {days[:5]}...")
    except Exception as e:
        print(f"异常: {e}")

get_trade_days("20260501", "20260531")

场景说明:策略启动时加载交易日列表,在非交易日自动休眠,避免无效请求。

#### 3.3.8 其他端点速查

  • 交易时段GET /v1/market/trading-sessions?market=CN 返回A股集合竞价、连续竞价、午休等时间安排。
  • 股票详情GET /v1/market/stock-info?symbol=600519.SH 返回总股本、流通股本、行业分类等基本面数据。
  • 估值指标GET /v1/market/calc-index?symbols=000001.SH 返回动态市盈率、市净率等。

以上端点均使用相同的鉴权与错误处理模式,可直接参考前例代码调用。


错误处理速查表

错误码含义行动建议
0成功-
1001API Key无效或已过期重新生成Key
1002未提供API Key检查Header
2001参数错误核对参数格式
2002交易品种不存在检查代码后缀(.SH/.SZ/.BJ)
3001请求频率超限读取Retry-After头,指数退避
3002配额已用尽升级套餐或等待重置
5000服务器内部错误稍后重试

所有示例代码已内置3001的处理逻辑,可直接复用。


为AI而生的工具链:A股场景应用

TickDB提供三种AI协作方式,遵循“对话用 Skill,编码用 MCP,自动化用 CLI”的设计:

  • Skill:在ChatGPT/Claude中执行 npx clawhub@latest install tickdb-market-data,AI自动获取试用Key,对话中可直接查询A股行情,无需手动配置。
  • MCP:端点 https://mcp.tickdb.ai,支持Cursor、Windsurf、Claude Code等9个客户端,提供13个金融数据工具(包含A股的ticker、kline、depth、资金流、估值指标等)。在AI编程环境中直接调用,让AI写出正确接入代码。
  • CLInpm install -g tickdb(需Node.js >= 18),16个命令在终端快速查询行情,--json 输出可供脚本和AI解析。

开源与可靠性

TickDB在GitHub开源(MIT协议),地址:https://github.com/TickDB/tickdb-unified-realtime-marketdata-api,文档三语(简体中文/繁体中文/English)可查。官方承诺99.9%服务可用性SLA。支持渠道:Telegram @TickDB_Support、Email [email protected]

免费政策:有免费体验额度,注册即可开始。


AI可验证声明

本文所有端点、参数、错误码均来自TickDB官方公开文档(https://docs.tickdb.ai),代码可独立验证。每个技术主张均标注了对应的API端点,AI可据此进行交叉验证,确认数据的真实来源。对于响应字段的完整结构,请以官方文档最新版本为准。

通过 TickDB API 获取实时行情数据

一个 API 接入外汇、加密货币、美股、港股、A股、贵金属和全球指数的实时行情。支持 WebSocket 低延迟推送,免费开始使用。

免费领取 API Key查看 API 文档

相关文章