Skip to content
All library documents

Retrieving ETF Holdings Through Bloomberg’s Portfolio Data Interfaces

Article Quant Q&A · Author: Jake Freeman

Summary

The document explains why a Bloomberg PortfolioDataRequest may fail when used to retrieve an ETF’s holdings. It distinguishes a portfolio identifier shown in PORT from the interface needed to request constituent data, and says the PORT look-through view corresponds to a members function rather than a standard portfolio data request.

The answer identifies BQL as the available API route for requesting holdings and weights, while noting that it cannot be used from C++. It also describes a limitation of the INDX_MEMBERS field: it supports index data but not equity tickers such as ETFs. The suggested workarounds are importing holdings from a spreadsheet populated through BQL or asking Bloomberg about tickerized portfolios or licensed holdings feeds. The guidance is specific to the interfaces discussed and does not establish availability or access requirements for a particular account.

Key ideas

  • A PORT portfolio identifier does not itself make an ETF holdings request valid through PortfolioDataRequest.
  • The document identifies BQL as the route for retrieving ETF constituents and their weights.
  • The INDX_MEMBERS field is described as unavailable for equity tickers, including ETFs.
  • Spreadsheet imports or a licensed holdings feed are presented as possible workarounds.

Tags

Full text
# Bloomberg Get ETF Constituents


# Bloomberg Get ETF Constituents












I used the PortfolioDataRequest aspect of the Bloomberg API in C++; however, when attempting to request the portfolio of the TAIL US EQUITY (an ETF), it returns an invalid symbol.

I also tried using the portfolio id "H195151-74" but to no avail.

## Answer by AKdemy (score 1)

https://quant.stackexchange.com/a/65540

I am assuming you just refer to Portfolio look-through in PORT? If so, that is the same as `TAIL US Equity MEMB`. That is not a portfolio data request. The `ID H195151-74` is just what PORT assigns to TAIL US Equity if you load it directly. I cannot comment on tickerized portfolios (these need extra enablement) but apart from that, in API, the only solution you have is BQL which you cannot use in C++ .

```
=BQL("members('TAIL US Equity',type='holdings')","id().weights")
```

Generally, there is `INDX_MEMBERS` but if you try that in `FLDS` you will see that it does not support any Equity tickers like @assylias explained as well (which means no ETFs like SPY, TAIL etc.). You can type `SPX Index FLDS DS325` in the command line to see what I mean. If you switch to an ETF, that field disappears because the filter is set to equity (which is not supported).

So I guess the easiest solution would be to automate an import from a sheet that pulls the ETF holdings via BQL. Or you ask your sales rep whether tickerized portfolios could do that or if they have some premium feed (data license) offering for holdings data.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.