You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bloomberg API(pdblp/xbbg)获取ETF成分股权重信息?

解决pdblp查询ETF持仓权重的问题

INDEX_MWEIGHT是Bloomberg专为指数设计的专用字段,无法直接用于ETF的持仓权重查询。要获取ETF(如IVV US Equity)的持仓信息,需使用Bloomberg针对基金/ETF提供的数据集字段,结合pdblp的bds方法调用。

核心解决方案

用FUND_HOLDINGS(完整持仓)或TOP_HOLDINGS(前N大持仓)字段替代INDEX_MWEIGHT,通过bds方法请求数据,具体代码示例如下:

1. 初始化Bloomberg连接

import pdblp

# 端口号根据Bloomberg终端配置调整,默认8194
con = pdblp.BCon(debug=False, port=8194, timeout=5000)
con.start()

2. 查询ETF完整持仓权重

# 查询IVV的完整持仓,可通过overrides指定日期、持仓类型等过滤条件
ivv_full_holdings = con.bds(
    tickers="IVV US Equity",
    flds="FUND_HOLDINGS",
    overrides=[
        ("FUND_HOLDINGS_DATE", "20240630"),  # 指定持仓日期,格式YYYYMMDD
        ("FUND_HOLDINGS_TYPE", "EQ")         # 仅返回股票类持仓
    ]
)

3. 查询ETF前N大持仓

如果只需要头部持仓,使用TOP_HOLDINGS字段更高效:

# 查询IVV前10大持仓
ivv_top_holdings = con.bds(
    tickers="IVV US Equity",
    flds="TOP_HOLDINGS",
    overrides=[("TOP_HOLDINGS_NUM", "10")]  # 指定返回持仓数量
)

4. 格式化输出结果

返回的DataFrame包含多列信息,可筛选并重命名为目标格式:

# 筛选关键列并调整列名
clean_holdings = ivv_full_holdings[["Security", "Weight (%)", "Shares Held", "Market Value"]]
clean_holdings = clean_holdings.rename(columns={
    "Security": "成分股代码",
    "Weight (%)": "持仓权重(%)",
    "Shares Held": "持有数量",
    "Market Value": "持仓市值"
})

# 重置索引(可选)
clean_holdings = clean_holdings.reset_index(drop=True)

关键说明

  • bds方法用于请求Bloomberg的数据集类型字段,ETF持仓属于数据集范畴,必须用bds而非bdp。
  • 可通过overrides参数灵活过滤数据:比如指定持仓日期、资产类型(股票/债券/现金)、持仓数量等。
  • 若不指定FUND_HOLDINGS_DATE,默认返回Bloomberg数据库中最新的可用持仓数据。

内容的提问来源于stack exchange,提问作者라이언홍

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:17:32