python - 用python查询bloomberg api;行情不返回任何东西
问题描述
我是Bloomberg终端的新手,但我正在尝试使用python API从bloomberg中提取数据。底层 c++ SDK 似乎正在工作,因为我已经 pip 安装了以下 python 库:
blpapi
pdblp
我可以连接到终端并运行包附带的示例数据:
con = pdblp.BCon(debug=False, port=8194, timeout=5000)
con.start()
# print some data
con.bdh('SPY US Equity', ['PX_LAST', 'VOLUME'],'20150629', '20150630')
这将返回以下内容:
ticker SPY US Equity
field PX_LAST VOLUME
date
2015-06-29 205.42 202621332.0
2015-06-30 205.85 182925106.0
所以一切似乎都在工作。问题是,如果我想尝试搜索某些代码,它只会返回一个空的数据名:
con.bsrch('COH9') #returns []
con.bsrch("COMDTY:COH9")
con.bsrch('COH9 Comdty')
con.bsrch("COMDTY")
con.bsrch('CL1 Comdty')
con.bsrch('CO1 Comdty')
所有这些都返回 []。'bsrch' 方法应该可以工作,因为自述文件中提供的以下示例可以工作并获取数据:
con.bsrch("COMDTY:NGFLOW")
问题是这些字符串中的每一个都在Bloomberg终端中返回一些东西,但这个api却没有返回任何东西。为什么?文档说这是搜索功能?
我尝试过其他命令,例如:
con.bdib('CL1 Comdty', start_datetime='20190127', end_datetime='20190128', event_type='BID', interval=1)
这也会引发错误:
Traceback (most recent call last):
File "bloomberg_api_test.py", line 56, in <module>
bloomberg_api_test()
File "bloomberg_api_test.py", line 38, in bloomberg_api_test
print(con.bdib('CL1 Comdty', start_datetime='20190127', end_datetime='20190128', event_type='BID', interval=1))
File "C:\Users\svc_tradingops\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pdblp\pdblp.py", line 681, in bdib
data = pd.DataFrame(data).set_index('time').sort_index().loc[:, flds]
File "C:\Users\svc_tradingops\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\frame.py", line 4156, in set_index
raise KeyError('{}'.format(missing))
KeyError: "['time']"
除非我错过了什么,否则文档中似乎没有关于如何使用这些方法的明确指导?
解决方案
诚然,这bsrch
不是图书馆的一个很好的文档功能。与此相关的问题之一是bsrch
使用ExcelGetGridRequest
通过底层blpapi
库生成,而彭博社没有记录该服务。截至我上次检查时,彭博社中Services & schemas reference guide
没有Core developer guide
关于ExcelGetGridRequest
. 确定这是否是底层blpapi
服务问题或某些处理方式的一种方法pdblp
是 set debug=True
,它将打印底层响应消息。例如
import pdblp
con = pdblp.BCon(debug=True).start()
con.bsrch("COMDTY:COH9")
下面的消息似乎表明这是一个无效的域。如上所述,没有太多关于这意味着什么的文档,因为该ExcelGetGridRequest
服务没有很好的文档记录,但彭博支持可能能够更多地了解该服务。
pdblp.pdblp:INFO:Sending Request:
ExcelGetGridRequest = {
Domain = "COMDTY:COH9"
}
pdblp.pdblp:INFO:Event Type: 'RESPONSE'
pdblp.pdblp:INFO:Message Received:
GridResponse = {
NumOfFields = 0
NumOfRecords = 0
ColumnTitles[] = {
}
DataRecords[] = {
}
ReachMax = false
Error = "The domain entered: COMDTY:COH9 is not valid."
SequenceNumber = 0
}
对于bdib
,根据文档字符串,start_datetime
和end_datetime
格式应该是YYYY-mm-ddTHH:MM:SS
,但不可否认,当不满足时引发的错误有点误导。例如
con.bdib('CL1 Comdty', start_datetime='2019-01-28T10:00:00',
end_datetime='2019-01-28T10:05:00', event_type='BID', interval=1)
open high low close volume numEvents
time
2019-01-28 10:00:00 52.62 52.67 52.62 52.66 10147 700
2019-01-28 10:01:00 52.66 52.69 52.64 52.69 9181 608
2019-01-28 10:02:00 52.69 52.70 52.68 52.69 12349 732
2019-01-28 10:03:00 52.69 52.71 52.68 52.70 11816 631
2019-01-28 10:04:00 52.70 52.70 52.67 52.69 8629 523
推荐阅读
- azure - 为什么 Azure Queue 消息的存活时间少于几秒钟?
- kotlin - 在不修改 POJO 的情况下向 XML 添加属性
- javascript - 查找数组中的一个或多个数字是否可以加起来等于某个数字
- python - 任何整数的 Python 方法都返回一个仅由数字 5 和 7 组成的列表
- aws-cli - aws cli 获取媒体命令
- python - LibreOffice 命令行打开 Docx 文件,在 Linux 上
- javascript - 使用 Mongoose 连接到 MongoDB
- c# - 如何设置 DataTemplate 生成按钮的方向?
- google-bigquery - BigQuery:如何折叠一些具有上下文相同数据的行
- algorithm - 使用什么算法在 2D 中查找空白区域?