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

如何将Excel BDH公式转换为Python API代码并获取周度数据

将Excel BDH公式转换为Python彭博API代码(获取周度数据)

你需要把Excel中的BDH公式转换为Python彭博API代码,目标是查询特定指数的周度数据,但当前代码仅返回日度数据,希望能像Excel里那样设置查询条件。


Excel中的BDH公式

=@BDH(AAIIBEAR Index,PX_LAST,Start Date,End DAte,"Dir=V","fill=#N/A","Per=W","Days=A","Dts=H","cols=1;rows=1783")

当前Python代码(仅返回日度数据)

import os 
from blp import blp 
import pdblp 
import blpapi
import datetime 
import xlwings 
import pandas as pd

with open(os.path.join(os.getenv("TEMP"), "Bloomberg", "log", "bbcomm.log"),"r") as f: 
    try:
        port = f.read().split("BLOOMBERG COMMUNICATION SERVER READY on Port: ")[-1].split("\n")[0]
    except:
        port = 8194

con = pdblp.BCon(debug = False, port = 8194, timeout = 100000)
con.start()
today = datetime.datetime.today()

#assign tickers
bbg = con.bdh(['AAIIBEAR Index','PX_LAST', start_date="20240210",end_date= "20240220")
bbg = bbg.resample('D').ffill()
print (bbg)

#print data to excel 
with pd.ExcelWriter(r'X:\Public\Employee folders\fvan\Market.xlsx') as writer:
    bbg.to_excel(writer, sheet_name='data', startcol=1)

解决方案:直接在API查询中设置周度参数

pdblp的bdh方法支持传入BDH公式中的所有参数选项,完全可以像Excel那样直接指定周度规则,无需事后resample。具体修正如下:

  1. 修复原代码的语法错误:bdh方法第一个参数是标的列表,第二个是字段列表,原代码把两者混写且括号未闭合
  2. 添加对应Excel BDH的参数选项,直接指定周度周期

修正后的完整代码

import os 
import pdblp 
import datetime 
import pandas as pd

# 获取彭博通信端口
with open(os.path.join(os.getenv("TEMP"), "Bloomberg", "log", "bbcomm.log"),"r") as f: 
    try:
        port = f.read().split("BLOOMBERG COMMUNICATION SERVER READY on Port: ")[-1].split("\n")[0]
        port = int(port)
    except:
        port = 8194

# 初始化彭博连接
con = pdblp.BCon(debug=False, port=port, timeout=100000)
con.start()

# 查询周度数据,完全对应Excel BDH的参数设置
bbg = con.bdh(
    tickers=['AAIIBEAR Index'],
    fields=['PX_LAST'],
    start_date="20240210",
    end_date="20240220",
    direction="V",                  # 对应Excel中的Dir=V
    fill="NA",                      # 对应Excel中的fill=#N/A
    periodicity_selection="WEEKLY", # 对应Excel中的Per=W(周度周期)
    days="ALL_CALENDAR_DAYS",       # 对应Excel中的Days=A
    date_type="HISTORICAL_DATE"     # 对应Excel中的Dts=H
)

# 输出结果并写入Excel
print(bbg)
with pd.ExcelWriter(r'X:\Public\Employee folders\fvan\Market.xlsx') as writer:
    bbg.to_excel(writer, sheet_name='data', startcol=1)

# 关闭连接
con.stop()

关键说明

  • 直接通过API参数指定周度周期,比事后用resample处理更准确,因为返回的是彭博官方计算的周度数据
  • 原代码中的resample('D').ffill()是日度填充逻辑,现在可以直接移除
  • 确保pdblp版本为最新,部分参数需要新版本支持

内容的提问来源于stack exchange,提问作者fiona van der steur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:30:59