QVeris
ETF 数据接口指南

免费 ETF 净值 API
数据源、字段与 Python 接入

查找免费 ETF 净值 API,先确认返回的是基金净值而非市场价格,
再测试当前或历史数据并接入应用。

免费 ETF 净值 API 白板图,展示选择 ETF、调用 NAV API、读取净值、检查溢折价并用于应用或 AI 智能体的五个步骤

免费 ETF 净值 API:开发者真正需要什么

用户任务

为正确基金与份额类别获取官方当前或历史净值,并保留估值时间、发布时间、币种和来源。

核心核对

区分官方 NAV、交易所价格、买卖报价、盘中参考净值和供应商估算值,它们回答的问题并不相同。

免费条件

核对鉴权、调用限制、再分发许可、覆盖范围、延迟和历史净值是否可用。

最终用途

计算溢折价前,应保留原始净值、每份币种、估值规则、修订状态,以及可比的市场价格时间戳。

ETF 净值数据接口需要核对的字段

NAV 是基金在指定估值时点的每份净资产价值。ETF 的市场成交价可能高于或低于净值,因此普通行情接口不等于 ETF 净值接口。可参考 美国 SEC Investor.gov 对 NAV 的定义。

估值时钟与数值本身同样重要。官方净值可能使用收盘价格、公允价值调整、应计收入与费用、负债和官方流通份额。国际或多资产基金仍在交易时,部分底层市场可能已经休市,因此同一屏幕上的市场价格与净值可能对应不同经济时点。

当前 ETF 净值字段

至少检查净值、估值日期或时间戳、币种、证券标识、来源和复权状态。只有数值而没有数据截止日期,很难验证数据。

ETF 历史净值接口字段

检查可用日期范围、频率、拆分或分红调整、缺失观测、分页方式和时区约定。

NAV、iNAV 与市场价格

每日 NAV、盘中参考净值(常称 iNAV 或 IIV)和交易所价格相关但不同,接入前要让字段与任务一致。

溢折价计算

只有当市场价格与净值对应可解释的同一比较时点和份额类别时,才可计算 (市场价格 / NAV - 1) × 100。同时应说明价格取最新成交、中间价、收盘价还是官方收盘。

币种、份额与公司行动

保存净值币种、交易币种、汇率与时间戳、每份分母、拆分因子、分派处理和份额类别事件。币种换算或拆分口径不一致,会制造虚假溢价或历史断点。

发布、修订与陈旧状态

分别保存估值时间、首次发布时间、供应商处理时间、抓取时间和修订 ID。缺失、估算、初步、更正和陈旧净值都应成为明确状态,不能无声沿用旧值。

可评估的免费 ETF 净值 API 数据源

可用普通本土股票 ETF、底层市场更早收市的国际 ETF、债券基金、分派日、拆分或份额事件和市场休市日组成测试集。比较数值、估值与发布时间、币种、状态、修订方式和标识解析,而不是只看响应里是否存在名为 nav 的字段。

来源类型可能提供的数据使用前核对适合场景
ETF 发行方官方每日净值与基金文件。是否为有文档的 API,以及是否允许自动化访问。验证已知发行方的基金。
市场数据服务商多发行方当前与历史 NAV、标识和元数据。免费层端点、延迟、覆盖、限额与许可。需要标准化覆盖的应用。
券商 API行情,以及部分 ETF 参考净值字段。账户要求、行情权限、实时性与字段定义。已有账户的交易流程。
监管或公共数据集基金标识、申报文件、参考记录或延迟披露。是否直接提供 NAV,以及记录如何映射到份额类别。研究与交叉验证。

如何接入免费的 ETF 历史净值接口

把供应商特定的字段映射与计算逻辑分开。将响应归一化为下面使用的字段后,示例会先验证官方 NAV 观测值;只有上市标的、份额类别和币种一致时,才计算溢价或折价。

from datetime import datetime
from decimal import Decimal, InvalidOperation

import requests


def parse_time(value: str) -> datetime:
    parsed = datetime.fromisoformat(value.replace("Z", "+00:00"))
    if parsed.tzinfo is None:
        raise ValueError("timestamps must include a timezone")
    return parsed


def fetch_json(endpoint: str, params: dict, headers: dict) -> dict:
    response = requests.get(
        endpoint, params=params, headers=headers, timeout=(5, 20)
    )
    response.raise_for_status()
    return response.json()


def premium_discount(nav_row: dict, price_row: dict) -> dict:
    identity = ("fund_id", "share_class", "currency")
    if any(nav_row.get(key) != price_row.get(key) for key in identity):
        raise ValueError("NAV and price identity or currency mismatch")
    if nav_row.get("nav_type") != "official":
        raise ValueError("premium calculation requires official NAV")
    try:
        nav = Decimal(str(nav_row["nav_per_share"]))
        price = Decimal(str(price_row["price"]))
    except (KeyError, InvalidOperation) as exc:
        raise ValueError("invalid NAV or price") from exc
    if nav <= 0 or price <= 0:
        raise ValueError("NAV and price must be positive")

    nav_time = parse_time(nav_row["valuation_time"])
    price_time = parse_time(price_row["observed_at"])
    gap_minutes = abs((price_time - nav_time).total_seconds()) / 60
    return {
        "premium_discount_pct": ((price - nav) / nav) * Decimal("100"),
        "nav_time": nav_time,
        "price_time": price_time,
        "time_gap_minutes": Decimal(str(gap_minutes)),
        "comparison_is_stale": gap_minutes > 60,
    }

解读结果时必须同时看时间。若官方 NAV 来自上一收盘、底层市场已经休市,或汇率随后发生变化,计算出的 2% 溢价并不等于 ETF 一定定价错误。应根据基金和使用场景设置过期阈值,并在百分比旁同时展示两个时间戳。

1. 解析 ETF 标识

把用户输入的交易代码映射到稳定标识和交易所。不同市场可能复用同一交易代码,ISIN、FIGI 或服务商基金 ID 往往更稳妥。

2. 请求较短日期范围

先用一只已知 ETF 和较短历史区间测试。在 Python 中按文档传参,检查 HTTP 状态成功后再解析 JSON。

3. 验证响应

核对标识、日期、币种、频率、空值和复权方式,并把至少一个观测值与发行方公布的 NAV 交叉验证。

4. 合规缓存与监控

遵守限流和许可;在允许时缓存每日 NAV,记录来源与数据截止时间,并把过期或缺失数据作为明确状态处理。

5. 计算溢折价前对齐净值与价格

选择口径明确的价格观测,确认属于同一上市与份额类别,统一币种并记录其与官方净值的时间差。若底层市场已休市或净值仍是前一日数据,应明确标注。

6. 建立可识别修订的历史序列

用基金、份额类别、估值日期、来源和修订号共同确定观测记录,并保留初步值和更正值及其发布时间,使研究只能使用模拟时点当时可获得的数值。

7. 监控连续性与异常

标记无法解释的跳变、预期工作日连续不变、负净值、币种切换,以及拆分或分派附近的缺口;异常应转来源核查,而不是自动插值。

用 QVeris 查找并调用 ETF 净值数据能力

QVeris 可帮助 AI 智能体在调用前发现并检查可用的金融数据能力。具体可用性、字段、鉴权、价格和许可仍由所选服务商决定;QVeris 不生成或保证 ETF 净值数据。

  • 打开 QVeris 服务商详情,查看相关 ETF 或基金数据能力。
  • 让 AI 智能体调用前先检查输入输出结构、净值类型、币种、估值规则、发布时间、修订状态和许可。
  • 每次工具请求都应明确基金与份额标识、日期范围、官方或参考净值,以及时效容忍度。
  • 在每次下游使用中保留服务商、原始数值、标识、估值与发布日期、修订号和验证结果。

免费 ETF 净值 API 常见问题

哪里有免费的 ETF 净值 API?

部分发行方、公共数据集、券商和数据服务商提供免费访问或有限免费层,但必须核对是否包含 NAV 端点,而不只是市场价格。

如何通过 API 获取 ETF 历史净值?

使用有文档的历史端点,传入 ETF 标识和起止日期,再核对日期、币种、复权方式、分页和缺失值。

ETF 净值和 ETF 价格一样吗?

不一样。NAV 是指定估值时点的每份基金净资产;市场价格是 ETF 份额在交易所成交的价格。

NAV 和 iNAV 有什么区别?

NAV 通常是按固定时间表计算的正式估值;iNAV 或 IIV 是盘中参考估计,输入和更新时间可能不同。

ETF 溢折价如何计算?

常见算法是选定市场价格相对净值的百分比差异。只有上市、份额类别、币种和比较时间都已对齐并公开说明时,结果才有意义。

为什么国际 ETF 的价格会明显偏离上一净值?

ETF 仍在交易时,底层市场可能已经休市,而汇率和新信息仍在变化。因此,上一官方净值相对交易价格可能已经陈旧,并不表示任何一方一定错误。

缺失净值可以直接向前填充吗?

不应默认这样做。应先识别休市、发布延迟、暂停估值、数据故障或基金事件,并保留缺失状态;任何估算都应单独标注,且不能冒充官方净值。

权威参考与相关指南

免费 ETF 净值 API 数据源、字段与 Python 接入 | QVeris Guides