【Python 量化取数指南 #09】港股通数据接口实测与跨市场取数
摘要:【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/dm、name/mc、jlr/net/净利润 等;不同财报端点字段前缀不同(jlr 净利润、lr 利润、yl 营收),统一 _hit_key。
5. 坑与注意事项
- 港股通 ≠ 港股全市场:
/ht/nbzj/hgtc|sgtc只是沪深港通成交,不是全部港股行情。 - 港股财报口径:
/hicw/*是港股财务,按年报/中报披露,滞后明显。 - AH 溢价要自己算:需 A 股价格(第 4 篇
/hs/real/ssjy/)和港股价格,本篇港股通成交不含个股 H 价,取 H 价请另寻行情端点。 - 代码后缀:港股代码多为
.HK(如00700.HK),和 A 股.SH/.SZ不同,混用会 404。 - 字段名三套:
jlr/net/净利润,用_hit_key。 - 日频 vs 年报:成交是日频、财报是年报,别混时间维度。
6. 常见报错速查
| 报错 / 现象 | 原因 | 处理 |
|---|---|---|
404 |
代码后缀错(.HK vs .SH) | 核对市场后缀 |
| 返回空 | 休市/无披露 | 换交易日/标的 |
| 单位错 | 港元/人民币 | print 核对 |
KeyError |
字段名不符 | print(data) 看真实 key |
7. 小结与下一篇预告
小结:港股通成交走 /ht/nbzj/hgtc|sgtc,港股财报走 /hicw/*;跨市场 AH 取数要把 A 股(第 4 篇)和港股端点拼起来,注意代码后缀与时间维度。
下一篇计划写 #10《可转债数据接口实测与指标计算》:用可转债端点拉行情与条款,自动算转股溢价率。
8. 免责声明
本文仅演示公开数据接口的用法,所有代码示例均为演示数据,不构成任何投资建议;实际返回字段以接口文档与你的证书权限为准。数据由 智兔数服 提供,更多接口示例见 技术博客。
免费领取证书 / 查看完整接口文档,可前往 智兔数服官网。
想亲自试一下?免费获取证书