用python查询彭博api;自动售票机一无所获

用python查询彭博api;自动售票机一无所获,python,bloomberg,blpapi,pdblp,Python,Bloomberg,Blpapi,Pdblp,我不熟悉彭博终端,但我正在尝试使用python API从彭博获取数据。下面的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',

我不熟悉彭博终端,但我正在尝试使用python API从彭博获取数据。下面的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
所以一切似乎都在运转。问题是,如果我想尝试搜索某些股票,它只会返回一个空的datafame:

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']"
回溯(最近一次呼叫最后一次):
文件“bloomberg_api_test.py”,第56行,在
彭博社api测试()
文件“bloomberg_api_test.py”,第38行,在bloomberg_api_test中
打印(con.bdib('CL1 Comdty',start_datetime='20190127',end_datetime='20190128',event_type='BID',interval=1))
bdib中第681行的文件“C:\Users\svc\u tradingops\AppData\Local\Programs\Python\Python37-32\lib\site packages\pdblp\pdblp.py”
data=pd.DataFrame(data).set_index('time').sort_index().loc[:,flds]
文件“C:\Users\svc\u tradingops\AppData\Local\Programs\Python\Python37-32\lib\site packages\pandas\core\frame.py”,第4156行,在集合索引中
raise KeyError(“{}.”格式(缺少))
KeyError:“[‘时间’]”

文档中似乎没有关于如何使用这些方法的明确指导,除非我遗漏了什么

诚然,
bsrch
不是该库的一个很好的文档化功能。其中一个问题是,
bsrch
uses通过底层的
blpapi
库生成一个
ExcelGetGridRequest
,而彭博社并未记录该服务。上次我检查时,彭博社的《服务与模式参考指南》或《核心开发者指南》中没有关于
ExcelGetGridRequest
的信息。确定这是否是基础
blpapi
服务的问题或通过
pdblp
进行的某些处理的一种方法是设置
debug=True
,这将打印基础响应消息。e、 g

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\u datetime
end\u 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

对于日内查询:谢谢,看到con.bdib的工作示例很有帮助。您是否知道如何让con.bdh返回给定股票代码的所有字段,而不指定它们的名称?医生们似乎也没有提到这一点。例如,我对'CGIEEUST'的'Inventory'字段感兴趣,但如果我尝试con.bdh('CGIEEUST Index',['Index'],'20190101','20190205'),就会出现另一个神秘错误。我很高兴将此作为一个单独的问题发布?这不是bloomberg公开的底层
HistoricalDataRequest
API的工作方式,必须明确查询所需字段。我不确定是否有一种程序化的方式来查询所有相关字段的代码,因为我从未遇到过这个特定的用例。我想你最好直接向彭博社咨询,看看他们是否支持这一点。对于这个新手问题,我很抱歉,再次感谢你的帮助