【Python量化实战全攻略 #07】基金行情与净值接口手册:ETF、LOF、开放式基金(附代码)
摘要:【Python量化实战全攻略 #07】基金行情与净值接口手册:ETF、LOF、开放式基金(附代码) 手册定位:「数据底座手册」第 7 篇。基金策略(ETF 轮动、定投、配置)的数据底座:本篇讲 基金列表、盘中估值、行情、K线、历史净值、持仓
手册定位:「数据底座手册」第 7 篇。基金策略(ETF 轮动、定投、配置)的数据底座:本篇讲基金列表、盘中估值、行情、K线、历史净值、持仓、排名怎么取。
接口路径取自智兔数服官网文档页已验证路径,未虚构。
1. 你将得到什么
- ETF/LOF/封闭式/开放式基金的列表端点;
- 基金盘中估值与实时行情;
- 基金K线、MA与历史净值(分红复权);
- 基金持仓(股票/债券)与重仓股、净值/业绩/规模排名;
- 基金数据的 4 个坑(净值日期、估值误差、K线周期参数、ETF 与开放式区分)。
2. 取数约定
| 项 | 值 |
|---|---|
| 基础域名 | https://api.zhituapi.com |
| 鉴权 | ?token=你的token |
| 基金代码 | 纯数字,如 180801、159001、000001 |
| K线周期参数 | /jh/hq/{zxkx\|lskx}/{代码}/{Period},Day=日线 |
3. 端点分组地图
| 分组 | 端点(GET) | 说明 |
|---|---|---|
| 所有基金列表 | /jh/list/all |
全量 |
| 沪深基金列表 | /fund/list/all |
沪深 |
| ETF列表 | /fund/list/etf |
ETF 标的 |
| 估值基金列表 | /jh/gz/gz |
可估值基金 |
| 盘中最新估值 | /jh/gz/zx/{代码} |
盘中估值 |
| 封闭式基金列表 | /jh/hq/list |
封基 |
| ETF行情列表 | /jh/hq/etflist |
ETF 行情 |
| LOF行情列表 | /jh/hq/loflist |
LOF 行情 |
| 基金最新K线 | /jh/hq/zxkx/{代码}/Day |
日K |
| 基金历史K线 | /jh/hq/lskx/{代码}/Day |
历史日K |
| 基金最新MA | /jh/hq/zxma/{代码}/Day |
均线 |
| 基本资料 | /jh/base/jjgk/{代码} |
概况 |
| 历史净值 | /jh/hb/lsjz/{代码} |
净值(复权) |
| 股票持仓 | /jh/zh/gpcc/{代码} |
持股票 |
| 债券持仓 | /jh/zh/zccc/{代码} |
持债券 |
| 基金重仓股 | /js/other/jjzc/2026_2 |
全市场重仓 |
| 开放式净值排名 | /js/pm/kfjzg/kfsjj_gpxjj_zsx |
排名 |
| 开放式业绩排行 | /js/pm/kfpm/kfsjj_gpxjj_zsx |
业绩 |
| 基金实时 | /fund/real/ssjy/{代码} |
实时 |
4. 核心模板函数(自包含可跑)
import time, requests, pandas as pd
BASE = "https://api.zhituapi.com"
TOKEN = "你的token"
_MOCK = False
def _hit_key(path):
return "%s%s?token=%s" % (BASE, path, TOKEN)
def _get(path, default=None, tries=3):
url = _hit_key(path)
for i in range(tries):
try:
if _MOCK:
return default
r = requests.get(url, timeout=8)
r.raise_for_status()
return r.json()
except Exception:
if i == tries - 1:
return default
time.sleep(0.5 * (i + 1))
def fetch_etf_list():
return _get("/fund/list/etf", default=[])
def fetch_nav_hist(code):
return _get("/jh/hb/lsjz/%s" % code, default=[])
def fetch_fund_kline(code, kind="lskx"):
return _get("/jh/hq/%s/%s/Day" % (kind, code), default=[])
def fetch_gpcc(code):
return _get("/jh/zh/gpcc/%s" % code, default=[])
def to_frame(raw):
if isinstance(raw, dict):
return pd.DataFrame([raw])
return pd.DataFrame(list(raw or []))
def run_check():
global _MOCK
_MOCK = True
nav = [{"日期": "2026-09-25", "单位净值": 1.250, "累计净值": 1.800},
{"日期": "2026-09-24", "单位净值": 1.245, "累计净值": 1.795}]
kline = [{"日期": "2026-09-25", "收盘": 1.25}, {"日期": "2026-09-24", "收盘": 1.24}]
gpcc = [{"股票代码": "600519", "占净值比": 0.08}]
assert len(nav) == 2
dfk = to_frame(kline)
assert len(dfk) == 2 and "收盘" in dfk.columns
assert gpcc[0]["占净值比"] == 0.08
print("校验通过 | 净值=%d条 K线=%d条 持仓=%d条" % (2, len(dfk), 1))
_MOCK = False
if __name__ == "__main__":
run_check()
5. 跑通示例
etfs = fetch_etf_list()
for code in [e["代码"] for e in (etfs or [])][:5]:
nav = to_frame(fetch_nav_hist(code)).sort_values("日期")
if len(nav) >= 20:
ret = nav["单位净值"].iloc[-1] / nav["单位净值"].iloc[-20] - 1
print(code, "近20日收益", round(ret, 4))
6. 坑与注意事项
- 净值日期滞后:历史净值(
/jh/hb/lsjz)通常 T+1,盘中用估值(/jh/gz/zx)但估值有跟踪误差,别当精确净值。 - K线周期参数:
/jh/hq/*/{Period}用Day表示日线,分钟线参数以文档为准,别直接套股票端点的1。 - ETF vs 开放式:ETF 用行情列表(
/jh/hq/etflist)+ K线,开放式基金用净值(/jh/hb/lsjz),二者不要混用端点。 - 复权口径:净值里的「累计净值」已含分红,做收益对比要统一用单位净值或累计净值,别混算。
7. 小结与下一篇预告
基金数据底座补齐,ETF 轮动/定投/配置策略有了数据源。下一篇讲可转债——转股价、溢价率、纯债价值怎么取,是可转债双低策略的数据源。
下一篇预告:《【Python量化实战全攻略 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(附代码)》
8. 免责声明
本文接口路径来自官方文档,示例数据为演示用途,不构成投资建议。
关于数据来源:本文接口来自智兔数服(www.zhituapi.com)官方文档,覆盖沪深A股、指数、基金、可转债等 200+ 已验证接口路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲可转债与债券接口。
想亲自试一下?免费获取证书