🚀 AI 一键生成 joinquant 策略代码

如何在 JoinQuant 平台获取场内基金的持股信息?

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

问题描述

请问场内基金对应的持股信息数据如何获取呢?

如题,我看文档中场外基金是有持股信息的,但场内基金没有相应的API的?

解决方案

在 JoinQuant(聚宽)平台上,获取场内基金(如 ETF、LOF 等)的持股信息,虽然没有像股票行情那样直接的单一函数,但可以通过以下两种主要方式来实现:

方法一:使用 finance.run_query 查询基金投资组合表

聚宽的 finance 模块提供了丰富的金融数据库查询功能。你可以通过 finance.run_query 查询基金的股票投资组合明细表(通常为 finance.FUND_PORTFOLIO_STOCK)。

示例代码:

from jqdata import *

# 查询某只场内基金(例如华夏上证50ETF:510050.XSHG)的最新持仓信息
q = query(finance.FUND_PORTFOLIO_STOCK).filter(
    finance.FUND_PORTFOLIO_STOCK.code == '510050.XSHG',
    finance.FUND_PORTFOLIO_STOCK.pub_date > '2023-01-01'
).order_by(
    finance.FUND_PORTFOLIO_STOCK.pub_date.desc()
).limit(50)

df = finance.run_query(q)
print(df)

注:具体的表名和字段请参考聚宽官网的“数据字典 - 基金数据”部分,以确保字段名称的准确性。

方法二:通过跟踪指数近似获取(适用于 ETF 等指数型基金)

大多数场内基金(特别是 ETF)是被动型指数基金,其持仓几乎完全复制其跟踪的标的指数。因此,你可以通过获取该基金所跟踪指数的成分股及权重,来精确近似该基金的持仓信息。这种方法数据更新更及时(基金财报通常有滞后性)。

1. 获取指数成分股:
使用 get_index_stocks(index_symbol, date=None) 获取指数成分股列表。

2. 获取指数成分股权重:
使用 get_index_weights(index_id, date=None) 获取成分股的具体权重。

示例代码:

from jqdata import *

# 假设我们要获取 510300.XSHG (沪深300ETF) 的持仓
# 它跟踪的是沪深300指数 (000300.XSHG)

# 1. 获取沪深300指数的成分股
stocks = get_index_stocks('000300.XSHG', date='2023-10-01')
print("成分股数量:", len(stocks))

# 2. 获取成分股的权重信息
weights_df = get_index_weights(index_id="000300.XSHG", date="2023-10-01")
print(weights_df.head())

总结建议

  • 如果你需要精确的财报披露持仓(包含主动型 LOF 基金),请使用 finance.run_query 查询基金财务数据库。
  • 如果你操作的是 ETF 等被动指数基金,强烈建议使用 get_index_weights 获取其跟踪指数的权重数据,因为指数权重数据更新频率更高,且能有效避免基金财报披露的滞后性(未来函数)问题。