← 返回博客列表

【Python 量化取数指南 #09】港股通数据接口实测与跨市场取数

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

摘要:【Python 量化取数指南 #09】港股通数据接口实测与跨市场取数 系列:《Python 量化取数指南》|连载项目 · 纯 GET 取数 · 仅依赖 requests 数据:由智兔数服提供。更多接口见 智兔数服

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

1. 你将得到什么

  • 港股通 2 类成交端点(沪港通/深港通)+ 港股财报 4 类端点的完整代码
  • 一个把「A 股指数 vs 港股通成交」对照看的小示例
  • 一个离线 run_check(),不填 token 也能验证逻辑

2. 本篇取数约定

  • 沪港通成交:/ht/nbzj/hgtc
  • 深港通成交:/ht/nbzj/sgtc
  • 港股财报(盈利能力等):/hicw/jlr(净利润)、/hicw/lr(利润)、/hicw/yl(营收)、/hicw/yjbb(业绩报表)
  • 请求: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_hk():
    # 4.1 沪港通成交 /ht/nbzj/hgtc
    data, err = _get("/ht/nbzj/hgtc")
    if err:
        print("沪港通成交失败:", err)
    else:
        val = _to_float(_hit_key(data, "value", "je", "成交额"))
        print(f"  沪港通成交: {val}")

    # 4.2 深港通成交 /ht/nbzj/sgtc
    data, err = _get("/ht/nbzj/sgtc")
    if err:
        print("深港通成交失败:", err)
    else:
        val = _to_float(_hit_key(data, "value", "je", "成交额"))
        print(f"  深港通成交: {val}")

    # 4.3 港股财报:净利润 /hicw/jlr
    data, err = _get("/hicw/jlr")
    if err:
        print("港股净利润失败:", err)
    else:
        items = data if isinstance(data, list) else (data.get("data") or [])
        print(f"  港股净利润样本 {len(items)} 条")
        if items:
            it = items[0]
            print("    样例:", _hit_key(it, "code", "dm"),
                  _hit_key(it, "name", "mc"),
                  "净利润:", _to_float(_hit_key(it, "jlr", "net", "净利润")))

def run_check():
    synth = {"code": "00700.HK", "name": "合成港股", "jlr": 1000}
    print(f"  [run_check] 港股合成: {synth['name']} 净利 {synth['jlr']}")

if __name__ == "__main__":
    demo_hk()
    run_check()

返回字段说明:港股通成交返回 date(日期)、value/je/成交额(成交额)。港股财报 list 每项含 code/dmname/mcjlr/net/净利润 等;不同财报端点字段前缀不同(jlr 净利润、lr 利润、yl 营收),统一 _hit_key

5. 坑与注意事项

  1. 港股通 ≠ 港股全市场/ht/nbzj/hgtc|sgtc 只是沪深港通成交,不是全部港股行情。
  2. 港股财报口径/hicw/* 是港股财务,按年报/中报披露,滞后明显。
  3. AH 溢价要自己算:需 A 股价格(第 4 篇 /hs/real/ssjy/)和港股价格,本篇港股通成交不含个股 H 价,取 H 价请另寻行情端点。
  4. 代码后缀:港股代码多为 .HK(如 00700.HK),和 A 股 .SH/.SZ 不同,混用会 404。
  5. 字段名三套jlr/net/净利润,用 _hit_key
  6. 日频 vs 年报:成交是日频、财报是年报,别混时间维度。

6. 常见报错速查

报错 / 现象 原因 处理
404 代码后缀错(.HK vs .SH) 核对市场后缀
返回空 休市/无披露 换交易日/标的
单位错 港元/人民币 print 核对
KeyError 字段名不符 print(data) 看真实 key

7. 小结与下一篇预告

小结:港股通成交走 /ht/nbzj/hgtc|sgtc,港股财报走 /hicw/*;跨市场 AH 取数要把 A 股(第 4 篇)和港股端点拼起来,注意代码后缀与时间维度。

下一篇计划写 #10《可转债数据接口实测与指标计算》:用可转债端点拉行情与条款,自动算转股溢价率。

8. 免责声明

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


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

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