← 返回博客列表

【Python量化实战全攻略 #07】基金行情与净值接口手册:ETF、LOF、开放式基金(附代码)

2026年10月13日 10:22 · 智兔数服 · Python量化实战全攻略

摘要:【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. 坑与注意事项

  1. 净值日期滞后:历史净值(/jh/hb/lsjz)通常 T+1,盘中用估值(/jh/gz/zx)但估值有跟踪误差,别当精确净值。
  2. K线周期参数:/jh/hq/*/{Period} 用 Day 表示日线,分钟线参数以文档为准,别直接套股票端点的 1。
  3. ETF vs 开放式:ETF 用行情列表(/jh/hq/etflist)+ K线,开放式基金用净值(/jh/hb/lsjz),二者不要混用端点。
  4. 复权口径:净值里的「累计净值」已含分红,做收益对比要统一用单位净值或累计净值,别混算。

7. 小结与下一篇预告

基金数据底座补齐,ETF 轮动/定投/配置策略有了数据源。下一篇讲可转债——转股价、溢价率、纯债价值怎么取,是可转债双低策略的数据源。

下一篇预告:《【Python量化实战全攻略 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(附代码)》

8. 免责声明

本文接口路径来自官方文档,示例数据为演示用途,不构成投资建议。


关于数据来源:本文接口来自智兔数服(www.zhituapi.com)官方文档,覆盖沪深A股、指数、基金、可转债等 200+ 已验证接口路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲可转债与债券接口。

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