I am trying to submit bulk data to convert yields to prices with bloomberg "yas_bond_px" field. However, when I have multiple overrides, such as yields and yld_convention, the query is not running. The only way is to use for i in list_x:, however, it takes long time as the loop sends query row by row. Is it any way to send the query for multiple overrides asynchronously or in parallel in order to not use for loop.
Here is my code:
def yas_calc(securities,overrideValue1,overrideValue2):
sessionOptions = blpapi.SessionOptions()
sessionOptions.setServerHost('localhost')
sessionOptions.setServerPort(8194)
session = blpapi.Session(sessionOptions)
if not session.start():
print("Failed to start session.")
return
try:
# Open service to get Bloomberg data from
if not session.openService("//blp/refdata"):
print("Failed to open //blp/refdata")
return
service = session.getService(REFDATA_SERVICE)
requestField = 'YAS_BOND_PX'
overrideID1 = 'YAS_BOND_YLD'
overrideID2 = 'YAS_YLD_CONV'
refDataService = session.getService("//blp/refdata")
request = refDataService.createRequest("ReferenceDataRequest")
request.getElement("securities").appendValue(securities)
request.getElement("fields").appendValue(requestField)
overrides1 = request.getElement("overrides").appendElement()
overrides1.setElement("fieldId", overrideID1)
overrides1.setElement("value", overrideValue1)
overrides2 = request.getElement("overrides").appendElement()
overrides2.setElement("fieldId", overrideID2)
overrides2.setElement("value", overrideValue2)
session.sendRequest(request)
while (True):
# We provide timeout to give the chance for Ctrl+C handling:
ev = session.nextEvent(500)
for msg in ev:
if msg.messageType() == "ReferenceDataResponse":
response_x = msg.getElement("securityData").getValueAsElement(0).getElement("fieldData").getElementAsString(
requestField)
print(response_x)
return msg.getElement("securityData").getValueAsElement(0).getElement("fieldData").getElementAsString(
requestField)
if ev.eventType() == blpapi.Event.RESPONSE:
# Response completely received, so we could exit
break
finally:# Stop the session
session.stop()