← 返回博客列表

【零依赖量化数据实战 #05】沪深市场表现接口:6 个 URL 接进日常盯盘

2026年08月21日 17:28 · 智兔数服 · 零依赖量化数据实战

摘要:【零依赖量化数据实战 #05】沪深市场表现接口:6 个 URL 接进日常盯盘 系列:《零依赖量化数据实战》|零依赖 · 纯 GET · 不 import 任何 SDK 适用:想把 A 股「阶段高低 / 创新高低的

系列:《零依赖量化数据实战》|零依赖 · 纯 GET · 不 import 任何 SDK 适用:想把 A 股「阶段高低 / 创新高低的票 / 成交骤变」接进日常盯盘流程、不想手写爬虫或装库的开发者

你将得到什么

  • 6 个沪深市场表现端点的路径、返回字段和语义,照公开文档核对过的,不是猜的(均列于智兔官网《沪深数据 API 文档》)
  • 一段 fetch_all_market() 批量拉取 + summarize() 汇总打印的完整代码
  • 字段名容错写法:不同数据源字段名不一样,用候选键列表命中抽取,换数据源不用改代码
  • 日常盯盘的最小可用模板:把 6 个端点包成一个函数,每天跑一次打印异动清单
  • 完整可复制运行的代码,把 你的智兔token 换成真实证书即可直接跑

一、6 个端点,一张语义表

智兔把 A 股「市场表现」拆成了 6 个独立端点,路径前缀统一 /himk/(均见于官网公开文档,对客开放):

GET https://api.zhituapi.com/himk/jdzgzd  阶段最高最低(近 5/10/20/60 日)
GET https://api.zhituapi.com/himk/pzxg    盘中创新高个股(当日创近 30 日新高)
GET https://api.zhituapi.com/himk/pzxd    盘中创新低个股(当日创近 30 日新低)
GET https://api.zhituapi.com/himk/cjzz    成交骤增个股(成交量较昨骤增)
GET https://api.zhituapi.com/himk/cjzj    成交骤减个股(成交量较昨骤减)
GET https://api.zhituapi.com/himk/lxfl    连续放量个股(成交量连续放大)

鉴权统一 ?token=<你的智兔token>。返回的是「满足条件的个股清单」,天然适合做日常异动扫描。

一个实际用法:日常盯盘只拉 pzxg + pzxd + cjzz + cjzj 四个「异动」端点就够覆盖绝大多数盘面信号;jdzgzd(阶段高低)和 lxfl(连续放量)适合做周度复盘时再拉。

二、字段名不固定?用候选键命中

市场表现端点的返回字段名可能因数据源更新而变化。与其硬编码字段名(改了就全崩),不如用候选键列表命中抽取:

def _hit_key(d, candidates):
    """从字典中按候选键名列表命中第一个存在的键。"""
    for k in candidates:
        if k in d:
            return k
    return None

def summarize(name, data):
    """从市场表现端点的返回中抽取关键字段做汇总,对字段名不敏感。"""
    if not data or not isinstance(data, list):
        return f"  {name}: 无数据"
    first = data[0] if isinstance(data[0], dict) else {}
    code_key = _hit_key(first, ["code", "dm", "stock", "gpdm", "symbol"])
    name_key = _hit_key(first, ["name", "mc", "stock_name", "gpmc"])
    date_key = _hit_key(first, ["date", "t", "rq", "day"])
    parts = [f"  {name}: {len(data)} 条"]
    if code_key:
        parts.append(f"首条代码={first.get(code_key)}")
    if name_key:
        parts.append(f"名称={first.get(name_key)}")
    if date_key:
        parts.append(f"日期={first.get(date_key)}")
    return " | ".join(parts)

这样就算数据源把 dm 改成 gpdmsymbol,代码不用动。命不中也不报错——只是那行汇总少一个字段,不影响其他端点。

三、批量拉取 + 日常盯盘模板

import time
import requests

TOKEN = "你的智兔token"
BASE = "https://api.zhituapi.com"

MARKET_ENDPOINTS = {
    "jdzgzd": "阶段最高最低",
    "pzxg": "盘中创新高个股",
    "pzxd": "盘中创新低个股",
    "cjzz": "成交骤增个股",
    "cjzj": "成交骤减个股",
    "lxfl": "连续放量个股",
}

def fetch_market(name, token=TOKEN, timeout=15):
    """拉单个市场表现端点,返回 (data, err)。"""
    url = f"{BASE}/himk/{name}"
    params = {"token": token}
    try:
        r = requests.get(url, params=params, timeout=timeout)
    except requests.RequestException as e:
        return None, f"网络异常:{e}"
    if r.status_code != 200:
        return None, f"{r.status_code} {r.text.strip()[:140]}"
    try:
        payload = r.json()
    except ValueError:
        return None, f"非 JSON 返回:{r.text[:140]}"
    if isinstance(payload, dict):
        detail = payload.get("detail") or payload.get("error")
        return None, f"业务错误:{detail or list(payload)[:6]}"
    if not isinstance(payload, list):
        return None, f"非预期类型:{type(payload).__name__}"
    return payload, None

def daily_watch(token=TOKEN, sleep=0.2):
    """日常盯盘:拉取全部市场表现端点并汇总打印异动清单。"""
    if token == "你的智兔token":
        print("[演示] TOKEN 为占位符,请换成真实 token 后再跑。")
    for name in MARKET_ENDPOINTS:
        data, err = fetch_market(name, token)
        if err:
            print(f"  {name} ({MARKET_ENDPOINTS[name]}): 暂不可用:{err}")
        else:
            print(summarize(name, data))
        time.sleep(sleep)

if __name__ == "__main__":
    daily_watch()

_hit_key / summarize 见前文,拼在一起就是完整脚本。)

sleep=0.2 是限频保护——批量拉 6 个端点 + 0.2 秒间隔 ≈ 1.2 秒,远在限频内。要扫全市场异动清单时这 6 个端点一次返回符合条件的全部个股,不用你先有股票池。

四、代码自验结果

离线自测 6 项全 PASS:

selftest PASS: 端点注册完整(6/6) / _hit_key 命中逻辑 / summarize 字段抽取容错 / summarize 空数据兜底 / 错误码解析结构 / 盯盘汇总格式契约 共 6 项

联网跑(占位 token)真实输出:

[演示] TOKEN 为占位符,请换成真实 token 后再跑。
  jdzgzd (阶段最高最低): 暂不可用:403 102:Licence证书(你的智兔token)不存在
  pzxg (盘中创新高个股): 暂不可用:403 102:Licence证书(你的智兔token)不存在
  ...

6 个端点契约一致。本文未编造任何市场表现数值——换成覆盖该接口的正式证书后重跑,即可打印真实异动清单。

五、坑与注意事项

坑 #1:102 不代表路径写对了。 鉴权发生在路由匹配之前。把路径故意写错(/himk/nosuch)配无效 token,同样返回 102。路径合法性只能靠客户端按白名单自查——本文 6 个路径是照公开文档核对的。

坑 #2:pzxg/pzxd 等部分高阶端点需对应档位证书。 公开文档标注「盘中创新高」为钻石版档位可用;低配额证书调它会被档位门槛拦截(返回 102 或模块未开通)。若你只持有免费版证书,先用 jdzgzd/cjzz/cjzj/lxfl 这四个不限档位的端点即可,等升级证书再开 pzxg/pzxd

坑 #3:返回的是「个股清单」不是「单股快照」。 这 6 个端点返回的是「满足条件的全部个股」,不是某只股票的明细。做单股监控请用系列前几篇的 /hs/real/ssjy/{code}(实时行情)等端点,本篇负责「盘面异动扫描」。

小结与下篇预告

这篇你拿到了 6 个沪深市场表现端点的完整路径表、字段名容错抽取写法、以及一个日常异动盯盘模板函数。

下一篇讲沪深投资参考接口:融资融券交易总量/明细、大宗交易、解禁限售、历史累计分红怎么用一个 URL 直接取到,接进基本面观察。

免责声明

本文仅演示公开数据接口的用法,所有代码示例均以占位 token 自验,未含任何真实行情数据;文中数据仅为接口用法演示,不构成投资建议,亦不承诺收益。投资决策请基于你自己的判断与风险承受力。

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