如何正确处理Bloomberg API批量字段DVD_HIST_ALL返回的报错问题
彭博API拉取DVD_HIST_ALL等批量字段的正确方法
错误原因
你调用的接口与字段类型不匹配:
bdp()全称为 Bloomberg Data Point,是单值点查询接口,仅支持返回单个值的静态字段(比如你之前使用的DVD_CRNCY返回单一的分红货币代码),因此可以正常运行DVD_HIST_ALL属于结构化数据集字段,返回多组历史分红的多行列数据,无法通过bdp()接口解析,因此会触发报错
正确解决方案
这类批量数据集字段需要调用bds()(Bloomberg Data Set)接口拉取,以下是不同常用彭博Python封装库的实现代码:
xbbg 库写法(最常用)
import pandas as pd from xbbg import blp # 拉取全量历史分红数据 df_div = blp.bds( tickers='AAPL US Equity', flds=['DVD_HIST_ALL'] ) df_div.head()
如果需要限定拉取的时间范围,可以添加时间参数:
# 拉取2010年至2023年的历史分红数据 df_div = blp.bds( tickers='AAPL US Equity', flds=['DVD_HIST_ALL'], start_date='2010-01-01', end_date='2023-12-31' )
pdblp 库写法
import pandas as pd import pdblp # 初始化连接,确保彭博终端已登录 con = pdblp.BCon(debug=False, port=8194, timeout=5000) con.start() df_div = con.bds('AAPL US Equity', 'DVD_HIST_ALL') df_div.head()
注意事项
- 所有返回多行列的非单值字段(比如历史收益
HIST_TRR_MONTHLY、股东变化OWNERSHIP_HISTORY、持仓明细类字段等),都需要使用bds()接口拉取 - 拉取前需确认彭博终端处于登录状态,本地API默认端口8194未被其他程序占用
内容的提问来源于stack exchange,提问作者ArthurV
相关产品推荐
相关产品推荐

