← 返回博客列表

【Python 量化取数指南 #06】实时行情 API 实测与可用性对比

2026年09月20日 09:05 · 智兔数服 · Python 量化取数指南

摘要:【Python 量化取数指南 #06】实时行情 API 实测与可用性对比 系列:《Python 量化取数指南》|连载项目 · 纯 GET 取数 · 仅依赖 requests 数据:由智兔数服提供。更多接口见 智兔

系列:《Python 量化取数指南》|连载项目 · 纯 GET 取数 · 仅依赖 requests
数据:由智兔数服提供。更多接口见 智兔数服技术博客

1. 你将得到什么

  • 实时行情 3 类端点的完整代码:全市场快照、单只五档、单只分时、ETF 实时
  • 一个本地测延迟的小脚本(记录请求耗时,判断够不够盘中用)
  • 一张「延迟/可用性」对照表,帮你选盘中盯盘用哪个

2. 本篇取数约定

  • 全市场实时快照:/hs/real/ssjy/(list,量大)
  • 单只五档:/hs/real/five/{code}{code}=600519.SH
  • 单只分时:/hs/real/time/{code}
  • ETF 实时:/jh/hq/etflist
  • 请求:GET https://api.zhituapi.com<path>?token=<你的智兔token>
  • 实时数据盘中才有,休市返回收盘快照或空

3. 核心模板(全系列复用)

import time, json, requests

BASE = "https://api.zhituapi.com"
TOKEN = "你的智兔token"      # 演示证书(免费版)即可起步

def _get(path, params=None, timeout=15, retry=3, backoff=1.5):
    params = dict(params or {})
    params["token"] = TOKEN
    url = BASE + path
    last = None
    for i in range(retry):
        try:
            r = requests.get(url, params=params, timeout=timeout)
            if r.status_code != 200:
                last = f"HTTP {r.status_code} {r.text[:120]}"
                time.sleep(backoff * (i + 1)); continue
            try:
                return r.json(), None
            except ValueError:
                last = f"非JSON响应: {r.text[:120]}"
                return None, last
        except requests.RequestException as e:
            last = str(e); time.sleep(backoff * (i + 1))
    return None, last

def _hit_key(d, *keys, default=None):
    if not isinstance(d, dict):
        return default
    for k in keys:
        if k in d and d[k] not in (None, "", []):
            return d[k]
    return default

def _to_float(x, default=float("nan")):
    try:
        return float(x)
    except (TypeError, ValueError):
        return default

4. 跑通示例:实时行情 + 延迟测试

def demo_realtime():
    # 4.1 全市场快照(一次拉一大批,测耗时)
    t0 = time.time()
    data, err = _get("/hs/real/ssjy/")
    dt = time.time() - t0
    if err:
        print("快照失败:", err)
    else:
        items = data if isinstance(data, list) else (data.get("data") or [])
        print(f"  快照 {len(items)} 条,耗时 {dt*1000:.0f}ms")

    # 4.2 单只五档 /hs/real/five/600519.SH
    data, err = _get("/hs/real/five/600519.SH")
    if err:
        print("五档失败:", err)
    else:
        print("  五档结构:", type(data).__name__)

    # 4.3 ETF 实时 /jh/hq/etflist
    data, err = _get("/jh/hq/etflist")
    if err:
        print("ETF失败:", err)
    else:
        items = data if isinstance(data, list) else (data.get("data") or [])
        print(f"  ETF数量: {len(items)}")

if __name__ == "__main__":
    demo_realtime()

返回字段说明:快照 list 每项含 code/dmprice/zxj/new/close(最新价)、name/mcpct/zdf(涨跌幅)。五档返回买一~买五、卖一~卖五档位与量。

5. 坑与注意事项

  1. 休市无实时:非交易时段 /hs/real/ssjy/ 返回的是上一交易日收盘快照,别当成「实时」。
  2. 快照量大:全市场一次几千条,盘中高频轮询会被限流,建议缓存 + 定时增量。
  3. 单只五档字段多bid1~bid5ask1~ask5bv1~bv5av1~av5,先 print 看真实键名。
  4. 延迟看网络也看证书:免费证书节点可能慢,生产要实测 P99。
  5. 时区:返回时间为北京时间,跨时区程序注意转换。
  6. 别用实时端点做回测:回测用历史 /hz/history/fsjy/(见第 5 篇)。

6. 常见报错速查

报错 / 现象 原因 处理
429 轮询太频 降频 + 缓存
返回收盘价 休市 交易时段再测
超时 网络/证书慢 调大 timeout
KeyError 字段名不符 print(data) 看真实 key

7. 小结与下一篇预告

小结:盘中盯盘用 /hs/real/ssjy/(全市场)或 /hs/real/five/{code}(单只五档),ETF 用 /jh/hq/etflist;务必实测延迟再上生产。

下一篇计划写 #07《股票财务数据 API 评测与取值》:用财务类端点一次拉全资产负债表/利润表/现金流量表,并给出指标计算示例。

8. 免责声明

本文仅演示公开数据接口的用法,所有代码示例均为演示数据,不构成任何投资建议;实际返回字段以接口文档与你的证书权限为准。数据由 智兔数服 提供,更多接口示例见 技术博客


免费领取证书 / 查看完整接口文档,可前往 智兔数服官网

想亲自试一下?免费获取证书