🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 平台如何获取 ETF 基金的市值?

joinquant | 发布时间: 2026/6/2
以下内容由 EasyQuant 生成。

问题描述

如何获取ETF基金的市值?

ETFList = list((getall_securities(['fund'])['type'] == 'etf').index)
df=get_fundamentals(query(valuation.code,valuation.market_cap).filter(valuation.code.in(ETFList ),valuation.market_cap >= 1), date=datetime(2021,12,14))

是否get_fundamentals()函数只支持股票市值查询 不支持基金?基金市值如何查?

解决方案

1. get_fundamentals() 是否只支持股票市值查询?

是的,get_fundamentals() 函数查询的 valuation(市值表)仅支持股票数据,不支持基金

valuation 表记录的是上市公司的总股本、流通股本、总市值、市盈率(PE)、市净率(PB)等财务指标。由于 ETF 基金不属于上市公司,其资产规模和份额是动态变化的,因此无法通过 valuation 表来获取基金的市值。


2. 在 JoinQuant 中如何查询 ETF 基金的市值(规模)?

在 JoinQuant 平台中,基金的详细数据(如基金规模、份额、资产净值等)独立于股票的财务数据,需要通过 finance.run_query() 接口查询专门的基金数据库表

虽然 get_fundamentals 不能查基金,但你可以通过查询基金概况表或基金资产组合表来获取 ETF 的规模数据。具体步骤如下:

解决方案:使用 finance.run_query() 查询基金数据

你需要查阅 JoinQuant 官网的数据字典 -> 基金数据,找到记录基金规模或份额的表(例如 finance.FUND_MAIN_INFO 基金主表,或 finance.FUND_PORTFOLIO 基金资产组合表),然后进行查询。

示例代码思路:

from jqdata import *

# 1. 获取所有 ETF 基金代码列表
etf_df = get_all_securities(['etf'])
etf_list = list(etf_df.index)

# 2. 使用 finance.run_query 查询基金相关表
# 注意:以下表名和字段名需根据聚宽最新数据字典进行替换
# 假设我们要查询基金的资产净值或份额
q = query(
    finance.FUND_PORTFOLIO.code,
    finance.FUND_PORTFOLIO.total_asset  # 假设该字段代表基金总资产/规模
).filter(
    finance.FUND_PORTFOLIO.code.in_(etf_list),
    finance.FUND_PORTFOLIO.pub_date >= '2021-12-01'
).limit(3000)

# 执行查询
df = finance.run_query(q)
print(df.head())

补充说明:

  1. 基金净值获取:如果你只需要获取 ETF 的单位净值或累计净值,可以使用 get_extras() 函数。例如:get_extras('unit_net_value', etf_list, start_date='2021-12-14', end_date='2021-12-14')
  2. 数据字典参考:由于基金数据表结构较为丰富,强烈建议在 JoinQuant 官网导航栏点击 “数据” -> “基金数据”,查看具体的表名(如 FUND_MAIN_INFO)和代表基金规模的字段名称,以便准确构造 query 语句。