#python #forward #bloomberg #rate #blpapi
Вопрос:
Я пытаюсь получить «CHF1M Curncy» как форвардные ставки, а не как баллы от Bloomberg API BLPAPI в Python. Сам код отлично работает для прямых точек, но как только я использую переопределение для переключения с точек на ставки, я получаю ошибку «Нет значения для []» для строки с первым переопределением. Это мой код:
import blpapi
import json
HISTORICAL_DATA_RESPONSE = blpapi.Name("HistoricalDataResponse")
def historical_bloomberg_data(securities, fields, periodicity="DAILY", start_date="20190101", end_date="20190105"):
# Create and start a session
print("Creating session ...")
sessionOptions = blpapi.SessionOptions()
sessionOptions.setServerHost('localhost')
sessionOptions.setServerPort(8194)
session = blpapi.Session(sessionOptions)
if not session.start():
print("Failed to start session")
return
try:
# Create and open a service
print("Creating historical data service")
if not session.openService("//blp/refdata"):
print("Failed to create service")
return
refDataService = session.getService("//blp/refdata")
request = refDataService.createRequest("HistoricalDataRequest")
# Add all securities
for security in securities:
request.getElement("securities").appendValue(security)
# Add all fields
for field in fields:
request.getElement("fields").appendValue(field)
# Further settings
request.set("periodicitySelection", periodicity)
request.set("startDate", start_date)
request.set("endDate", end_date)
request.set("maxDataPoints", 2000)
#Override code
overrides = request.getElement('overrides')
override1 = overrides.appendElement()
override1.setElement('fieldID', 'FWD_CURVE_FORMAT')
override1.setElement('value', 'RATES')
#request.setOverride("FWD_CURVE_FORMAT", "RATES")
# Send and process request
print("Sending request...")
session.sendRequest(request)
results = {}
while True:
ev = session.nextEvent(500)
for msg in ev:
if msg.messageType() == HISTORICAL_DATA_RESPONSE:
#response = msg.getElement()
response = msg.getElement("securityData")
_sec = response.getElementAsString("security")
_data = [[fd.getElementAsString("date")] [fd.getElementAsString(_) for _ in fields] for fd in response.getElement("fieldData").values()]
results[_sec] = results.get(_sec, []) _data
if ev.eventType() == blpapi.Event.RESPONSE:
break
print("Results retrieved")
return results
Ответ №1:
Правильное переопределение таково FWD_CURVE_QUOTE_FORMAT
. Значения могут быть:
POINTS
RATES
OUTRIGHT
(Я подозреваю, что ПРЯМО и СТАВКИ делают то же самое)
Редактировать
И правильный способ переопределить поле-использовать fieldId
(заканчивающийся маленькой шапкой d
) , а не fieldID
.
Комментарии:
1. Привет, спасибо за ваш вклад. К сожалению, он также не работает с форматом FWD_CURVE_QUOTE_FORMAT. :/
2. Какой тикер и поле вы используете? Я только что попробовал использовать CHF1M Curncy и PX_LAST с 1 сентября 2021 года по сегодняшний день, и это работает так, как ожидалось. Я также отмечаю, что для переопределения вы должны использовать
fieldId
неfieldID
— не уверен, имеет ли это значение.3. В этом вся разница!. Вам нужно
override1.setElement('fieldId', 'FWD_CURVE_QUOTE_FORMAT')
использовать строчную букву «d», иначе это не сработает.