python - 如何在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,
)
提前致谢!
解决方案
此公式在 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
推荐阅读
- python-2.7 - 语法错误:只有命名参数可以跟随在 nn.Sequential() 上的 * 表达式
- lldb - 如何使用 atos/addr2line/llvm-symbolizer/lldb image lookup --address 获取与 lldb 相同的行号
- python - 按多列分组并按月/年分组
- python - 如何在不使用插入的情况下将某些内容添加到特定位置的列表中
- java - 如何暂停/继续计划任务?
- c++ - 如何使用用户输入制作字符串队列?
- string - 我想我的括号有问题
- vhdl - 如何使用寄存器实现 4 位加法器
- ios - UICollectionView 布局在滚动时表现异常
- java - 错误:无法访问 com.google.android.gms.internal.zzeuq 的 zzeuq 类文件,请不要找到