запрос API Bloomberg с помощью Python; тикеры ничего не возвращают

Я новичок в терминалах Bloomberg, но пытаюсь получить данные из Bloomberg с помощью API Python. Базовый SDK С++, похоже, работает, поскольку я установил следующие библиотеки 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» должен работать, потому что следующий пример, представленный в файле readme, работает и извлекает данные:

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']"

Кажется, в документах не так много четких указаний о том, как использовать эти методы, если я что-то не пропустил?


person user3062260    schedule 31.01.2019    source источник
comment
для внутридневных запросов: stackoverflow.com/a/53504904/1332656   -  person Alpha    schedule 03.02.2019


Ответы (1)


Следует признать, что bsrch не очень хорошо задокументирована функция библиотеки. Одна из проблем, связанных с этим, заключается в том, что bsrch использует ExcelGetGridRequest через базовую библиотеку blpapi, и эта служба не задокументирована Bloomberg. В последний раз, когда я проверял, в Services & schemas reference guide или Core developer guide от Bloomberg нет информации о ExcelGetGridRequest. Один из способов выяснить, является ли это проблемой базовой службы blpapi или некоторой обработки через pdblp, — установить debug=True, который будет печатать базовые ответные сообщения. например

import pdblp
con = pdblp.BCon(debug=True).start()
con.bsrch("COMDTY:COH9")

Сообщение ниже указывает на то, что это недопустимый домен. Как упоминалось выше, не так много документации о том, что это означает, поскольку служба ExcelGetGridRequest не очень хорошо документирована, но служба поддержки Bloomberg может пролить больше света на эту службу.

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
person mgilbert    schedule 31.01.2019
comment
Спасибо, полезно увидеть рабочий пример con.bdib. Вы случайно не знаете, как заставить con.bdh возвращать все поля для данного тикера, не называя их конкретно? Документы, похоже, тоже не упоминают об этом. Например, меня интересует поле «Инвентарь» в «CGIEEUST», но если я попробую con.bdh('CGIEEUST Index', ['INDEX'], '20190101', '20190205'), появится еще одна загадочная ошибка. Я рад опубликовать это как отдельный вопрос? - person user3062260; 04.02.2019
comment
Это не то, как работает базовый HistoricalDataRequest API, предоставляемый Bloomberg, требуемые поля должны быть явно запрошены. Я не уверен, есть ли программный способ запросить тикер для всех соответствующих полей, поскольку я никогда не сталкивался с этим конкретным вариантом использования. Я думаю, что вам лучше всего обратиться напрямую в службу поддержки Bloomberg, чтобы сначала узнать, поддерживается ли это вообще с их стороны. - person mgilbert; 04.02.2019
comment
Извините за вопрос новичка, еще раз спасибо за вашу помощь - person user3062260; 05.02.2019