云计算百科
云计算领域专业知识百科平台

【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #12】指数分时+技术指标难搞?8个接口,分时MACD·MA·BOLL·KDJ全取

【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #12】指数分时+技术指标难搞?8个接口,分时MACD/MA/BOLL/KDJ全取

系列:别再到处找免费股票数据API了:官方204个接口,32篇一次讲透|连载项目 · 纯 GET 取数 · 仅依赖 requests
适用:做量化 / 选股 / 复盘,但还在手动导 CSV、网页复制、自写爬虫的读者。本篇给沪深指数分时与技术指标的 8 个端点的分组地图、指数分时与技术指标的代码,全部只依赖 requests,所有示例均为演示数据,不构成投资建议。

1. 你将得到什么

读完这一篇,你能拿走四样东西:

  • 一张分组地图:8 个端点按用途分组,知道什么数据该敲哪个门;
  • 一行取数的代码:主要端点一次返回,不用循环拼装;
  • 分时「最新/历史」两套接口与技术指标序列参数的坑;
  • 三个真实踩坑点,都是第一次用几乎一定会踩的。
  • 代码全部自包含,复制进 .py 直接能跑,不依赖 numpy / pandas。

    2. 本篇取数约定

    • 全部接口都是 GET + query 参数,token 放在查询串里(?token=xxx);
    • 统一基址 https://api.zhituapi.com;
    • 代码块里的 你的token 是占位符,换成你的 token 即可;
    • 所有接口路径均取自官方已验证文档,跨篇零重复。

    3. 8 个端点分 3 组

    先建立地图。沪深指数分时与技术指标一共 8 个端点,按用途分:

    组端点用途更新频率
    分时 /hz/latest/fsjy 指数分时·最新 实时
    分时 /hz/history/fsjy 指数分时·历史 每日盘后
    PRO分时 /hz/pro/latest/fsjy 指数分时PRO·最新 实时
    PRO分时 /hz/pro/history/fsjy 指数分时PRO·历史 每日盘后
    技术指标 /hz/history/macd 指数MACD 每日盘后
    技术指标 /hz/history/ma 指数MA 每日盘后
    技术指标 /hz/history/boll 指数BOLL 每日盘后
    技术指标 /hz/history/kdj 指数KDJ 每日盘后

    4. 核心模板函数

    import requests, time
    from urllib.parse import quote

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

    # ———- 1. 字段容错与类型归一 ———-
    def _hit_key(d, *cands, default=None):
    """字段容错:接口偶发大小写/中英文混用时,按顺序取第一个非空值"""
    if not isinstance(d, dict):
    return default
    for c in cands:
    if c in d and d[c] not in (None, "", "-", "null"):
    return d[c]
    low = {str(k).lower(): v for k, v in d.items()}
    for c in cands:
    v = low.get(str(c).lower())
    if v not in (None, "", "-", "null"):
    return v
    return default

    def _to_float(v, default=None):
    try:
    if v in (None, "", "-", "null", "None"):
    return default
    return float(v)
    except (TypeError, ValueError):
    return default

    # ———- 2. 统一请求:重试 + 退避 ———-
    def _get(path, params=None, timeout=10, retries=2, backoff=0.6, default=None):
    """返回 JSON;失败重试 retries 次仍失败则返回 {'_error': 原因}"""
    q = {"token": TOKEN}
    if params:
    q.update(params)
    last = ""
    for i in range(retries + 1):
    try:
    r = requests.get(BASE + path, params=q, timeout=timeout)
    if r.status_code == 200:
    try:
    return r.json()
    except ValueError:
    return default
    last = "HTTP %s %s" % (r.status_code, (r.text or "").strip()[:80])
    except Exception as e:
    last = "%s: %s" % (type(e).__name__, e)
    if i < retries:
    time.sleep(backoff * (i + 1))
    return {"_error": last}

    def fetch_hz_latest_fsjy(): return _get("/hz/latest/fsjy", default=[])
    def fetch_hz_history_fsjy(): return _get("/hz/history/fsjy", default=[])
    def fetch_hz_pro_latest_fsjy(): return _get("/hz/pro/latest/fsjy", default=[])
    def fetch_hz_pro_history_fsjy(): return _get("/hz/pro/history/fsjy", default=[])
    def fetch_hz_history_macd(): return _get("/hz/history/macd", default=[])
    def fetch_hz_history_ma(): return _get("/hz/history/ma", default=[])
    def fetch_hz_history_boll(): return _get("/hz/history/boll", default=[])
    def fetch_hz_history_kdj(): return _get("/hz/history/kdj", default=[])

    # ———- 3. 校验 ———-
    def run_check():
    assert _hit_key({"Code": "000001", "Name": "平安银行"}, "code", "dm") == "000001"
    assert _to_float("-") is None and _to_float("12.5") == 12.5
    enc = "/x/%s" % quote("示例")
    assert "示例" not in enc and "%" in enc
    print("校验通过")

    if __name__ == "__main__":
    run_check()
    print("-" * 62)
    for name, path in [
    ("指数分时·最新", "/hz/latest/fsjy"),
    ("指数分时·历史", "/hz/history/fsjy"),
    ("指数分时PRO·最新", "/hz/pro/latest/fsjy"),
    ("指数分时PRO·历史", "/hz/pro/history/fsjy"),
    ("指数MACD", "/hz/history/macd"),
    ("指数MA", "/hz/history/ma"),
    ("指数BOLL", "/hz/history/boll"),
    ("指数KDJ", "/hz/history/kdj")
    ]:
    data = _get(path, default=[])
    if isinstance(data, dict) and "_error" in data:
    print("%-12s %-40s -> %s" % (name, path, data["_error"][:60]))
    else:
    print("%-12s %-40s -> %d 条" % (name, path, len(data)))

    5. 跑通示例

    把上面的代码复制到本地,填入你的 token 即可直接运行:它会请求对应接口、拉取真实数据,并输出各端点的条数(各字段含义见前文各小节)。

    6. 坑与注意事项

    坑 1:分时有两套接口。
    fsjy 与 pro/…/fsjy 返回结构不同,PRO 版字段更全,按需选择别混用。

    坑 2:技术指标要带日期范围。
    macd/ma/boll/kdj 返回序列,不传日期范围默认只给最近一段,回测要显式传参。

    坑 3:频率不同。
    指数技术指标和个股技术指标字段同名但更新频率不同,注意时间戳。

    7. 小结与下篇预告

    本篇把沪深指数分时与技术指标类 8 个端点分成 3 组,给出分时与技术指标的代码,并用 run_check 验证字段容错。

    下一篇:《【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #13】融资融券大宗交易靠搜?7个接口,投资参考数据一站取》:用本篇同组接口,把下一类数据一次取全。

    8. 免责声明

    本文仅演示沪深指数分时与技术指标数据的取数方法,所有代码示例均为演示数据,未含任何真实行情数值,不构成投资建议,亦不承诺收益。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #12】指数分时+技术指标难搞?8个接口,分时MACD·MA·BOLL·KDJ全取
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!