如何使用 api in python 向 bloomberg bdh 查询添加选项
How to add options to bloomberg bdh query using api in python
我有以下 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 US Equity 的地方,字段为 IVOL_Delta,开始日期和结束日期不言而喻,剩下的就是选项。
它在 Excel 中工作得很好。
我想用 API 代替 python,但我不知道如何将选项转换为可行的输入,我已经尝试过作为字典和列表 (不过可能搞砸了。
我尝试了以下代码但没有成功(如果我删除了 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,
)
提前致谢!
这个公式在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 看涨期权与基础彭博 API 的期权之间不存在 1-1 映射是有帮助的。本文档描述了映射:
https://data.bloomberglp.com/professional/sites/10/2017/03/BLPAPI-Core-Developer-Guide.pdf 第 92 页。
因此 BDH Days=A
转换为 Days='ALL_CALENDAR_DAYS'
。但我建议如果你不想周末,使用 Days='NON_TRADING_WEEKDAYS'
至于 Sort,文档是这样说的:“BDH() 函数中的某些参数,例如“Sort”,在 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
我有以下 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 US Equity 的地方,字段为 IVOL_Delta,开始日期和结束日期不言而喻,剩下的就是选项。
它在 Excel 中工作得很好。
我想用 API 代替 python,但我不知道如何将选项转换为可行的输入,我已经尝试过作为字典和列表 (不过可能搞砸了。
我尝试了以下代码但没有成功(如果我删除了 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,
)
提前致谢!
这个公式在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 看涨期权与基础彭博 API 的期权之间不存在 1-1 映射是有帮助的。本文档描述了映射: https://data.bloomberglp.com/professional/sites/10/2017/03/BLPAPI-Core-Developer-Guide.pdf 第 92 页。
因此 BDH Days=A
转换为 Days='ALL_CALENDAR_DAYS'
。但我建议如果你不想周末,使用 Days='NON_TRADING_WEEKDAYS'
至于 Sort,文档是这样说的:“BDH() 函数中的某些参数,例如“Sort”,在 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