将Excel Bloomberg BDH函数转换为Python代码遇字段错误求助
解决blp库BDH字段无效错误的方案
1. 核对修正字段名称
Bloomberg商品类证券(Comdty)的字段名和股票等类型不一样,你用的Trade、Settle是Excel公式里的显示名,不是blp库需要的官方字段代码:
- 对应
Trade的常用字段代码是PX_LAST(最新成交价) - 对应
Settle的常用字段代码是SETTLE_PRICE(结算价)
要是拿不准,直接在Bloomberg终端输FLDS MZBZ4C 75.00 Comdty,查该合约的有效字段代码就行。
修正后的字段参数:
fields = ["PX_LAST", "SETTLE_PRICE"]
2. 修正日期参数匹配原Excel逻辑
原Excel公式起始时间是2024-02-20 09:00:00,你现在写的start_date="20240219"日期不对,还没带时间。blp库支持带时间的日期格式,改成:
start_date="2024-02-20 09:00:00" end_date="" # 留空默认取最新数据
3. 匹配原Excel的BDH选项参数
原Excel里的选项要转成blp库支持的参数:
Dir=V:blp库默认就是垂直返回数据,不用额外设置IntrRw=true:对应options={"include_non_trading_days": True}Dts=S:对应options={"date_type": "string"}QRM=S:对应options={"quote_request_mode": "snapshot"}Headers=Y:blp返回的DataFrame默认带表头,不用管
整合后的options:
options={ "include_non_trading_days": True, "date_type": "string", "quote_request_mode": "snapshot", "adjustmentSplit": True # 保留你原有的拆股调整设置 }
4. 完整修正代码
from blp import blp bquery = blp.BlpQuery().start() df = bquery.bdh( "MZBZ4C 75.00 Comdty", ["PX_LAST", "SETTLE_PRICE"], start_date="2024-02-20 09:00:00", end_date="", options={ "include_non_trading_days": True, "date_type": "string", "quote_request_mode": "snapshot", "adjustmentSplit": True } )
额外排查点
- 要是还报字段无效,再用
FLDS命令确认字段代码,别用显示名 - 检查blp库是不是最新版本,旧版本可能不支持部分商品类字段
- 确认Bloomberg会话和网络正常,有时会话异常也会出这种错误
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

