首页 > 解决方案 > 如何在python中使用api为bloomberg bdh查询添加选项

问题描述

我有以下excel公式:

=@BDH("TSLA US Equity";"IVOL_Delta";start_date;end_date;IVOL_MATURITY=Maturity_90D;IVOL_DELTA_LEVEL=DELTA_LVL_25;IVOL_DELTA_PUT_OR_CALL=IVOL_CALL;days=a;Sort=D;cols=2;rows=1826).

如果证券是 TSLA 美国股票,该字段是 IVOL_Delta,开始日期和结束日期不言自明,剩下的就是选项。

它在 Excel 中工作得很好。

我想改用python的API,但我不知道如何将选项转换为可行的输入,我已经尝试过作为字典和列表(虽然可能会搞砸一些事情)。

我尝试了以下代码但没有运气(如果我删除了 dict 和“options=opt”行,它就可以工作):

import pandas
from blp import blp

bquery = blp.BlpQuery().start()

opt = {"IVOL_DELTA_LEVEL":"DELTA_LVL_25"}

bquery.bdh(
    ["TSLA US Equity"],
    ["PX_LAST","IVOL_Delta","VOLUME_TOTAL_CALL"],#,"OPT_DELTA_MID_RT"
    start_date="20210801",
    end_date="20210819",
    options = opt,
)

提前致谢!

标签: pythonbloombergblpapi

解决方案


此公式在 Excel 中的输出:

=BDH("TSLA US Equity","PX_LAST,IVOL_Delta,VOLUME_TOTAL_CALL",D2,D3,"IVOL_MATURITY","Maturity_90D","IVOL_DELTA_LEVEL","DELTA_LVL_25","IVOL_DELTA_PUT_OR_CALL","IVOL_CALL")

是:

在此处输入图像描述

您可以使用该xbbg包获得相同的数据。Python 中有很多 Bloomberg 的包装器,但这是我个人最喜欢的一个 ( pip install xbbg)

from xbbg import blp
from datetime import datetime

df = blp.bdh('TSLA US Equity',['PX_LAST','IVOL_Delta','VOLUME_TOTAL_CALL'],datetime(2021,8,1),datetime(2021,8,19),
                 IVOL_DELTA_LEVEL='DELTA_LVL_25',
                 IVOL_MATURITY='MATURITY_90D',
                 IVOL_DELTA_PUT_OR_CALL='IVOL_CALL')

print(df)

输出:

           TSLA US Equity                             
                  PX_LAST IVOL_Delta VOLUME_TOTAL_CALL
2021-08-02       709.6700    50.4803         1049494.0
2021-08-03       709.7400    50.3468          678750.0
2021-08-04       710.9200    50.0790          661374.0
2021-08-05       714.6300    49.7532          551532.0
2021-08-06       699.1000    47.7234          918211.0
2021-08-09       713.7600    47.6382          469777.0
2021-08-10       709.9900    46.8017          448640.0
2021-08-11       707.8200    46.3517          431084.0
2021-08-12       722.2500    46.7595          882608.0
2021-08-13       717.1700    47.3414         1028457.0
2021-08-16       686.1700    48.3680          639570.0
2021-08-17       665.7100    50.4111          716804.0
2021-08-18       688.9900    49.4700          732574.0
2021-08-19       680.7001        NaN               NaN

与 Excel 匹配(保存为今天的实时价格)。

编辑:添加对天数和排序的支持

知道 Excel BDH 调用上的选项与底层 Bloomberg API 之间没有 1-1 映射是有帮助的。本文档描述了映射: https ://data.bloomberglp.com/professional/sites/10/2017/03/BLPAPI-Core-Developer-Guide.pdf第 92 页。

所以 BDHDays=A转换为Days='ALL_CALENDAR_DAYS'. 但我建议如果你不想要周末,使用Days='NON_TRADING_WEEKDAYS'

至于排序,该文档说:“BDH() 函数中的某些参数,例如“排序”,在 API 模式中不可用,因为它们是 Bloomberg Excel 插件所独有的”。即 Excel 插件进行排序,而不是底层 API。幸运的是,如果您愿意,只需反转接收到的 DataFrame 很简单。

修改后的代码:

df = blp.bdh('TSLA US Equity',['PX_LAST','IVOL_Delta','VOLUME_TOTAL_CALL'],datetime(2021,8,1),datetime(2021,8,19),
                 IVOL_DELTA_LEVEL='DELTA_LVL_25',
                 IVOL_MATURITY='MATURITY_90D',
                 IVOL_DELTA_PUT_OR_CALL='IVOL_CALL',
                 Days = 'NON_TRADING_WEEKDAYS').iloc[::-1]

结果:

           TSLA US Equity                             
                  PX_LAST IVOL_Delta VOLUME_TOTAL_CALL
2021-08-19         673.47    50.1950          461203.0
2021-08-18         688.99    49.4700          732574.0
2021-08-17         665.71    50.4111          716804.0
2021-08-16         686.17    48.3680          639570.0
2021-08-13         717.17    47.3414         1028457.0
2021-08-12         722.25    46.7595          882608.0
2021-08-11         707.82    46.3517          431084.0
2021-08-10         709.99    46.8017          448640.0
2021-08-09         713.76    47.6382          469777.0
2021-08-06         699.10    47.7234          918211.0
2021-08-05         714.63    49.7532          551532.0
2021-08-04         710.92    50.0790          661374.0
2021-08-03         709.74    50.3468          678750.0
2021-08-02         709.67    50.4803         1049494.0

推荐阅读