信誓旦旦的程序猿头像
关注
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测封面图

【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测

【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测

系列:《Python 量化取数指南》|连载项目 · 纯 GET 取数 · 仅依赖 requests
适用:想用 Python 拿港股通成交、港股财报,做 AH 跨市场取数的人。

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《Python 取可转债行情:转股溢价率自动算》:用可转债端点拉行情与条款,自动算转股溢价率。

8. 免责声明

本文仅演示公开数据接口的用法,所有代码示例均为演示数据,不构成任何投资建议;实际返回字段以接口文档与你的证书权限为准。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2601_96703250/article/details/166555754

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--