如何通过Python获取历史Bloomberg API中的覆盖信息
在Excel的接口中,Bloomberg允许你进行一些设置,并且可以指定数据的周期性:
BDH("IBM EQUITY","BEST SALES","1/1/2011","2/1/2011","BEST FPERIOD OVERRIDE","BF",, "DAYS=W","FILL=C","SORT=D")
在Python中:
import win32com.client
from datetime import datetime
blp = win32com.client.Dispatch('Bloomberg.Data.1')
ibm_sales=blp.BLPGetHistoricalData('ibm equity', 'best sales', datetime(2011,1,1), datetime(2011,2,1))
你怎么添加这些设置“BEST FPERIOD OVERRIDE”和“BF”?
3 个回答
0
请看这个Python函数,它可以处理最多6个重写。
# Fill SessionOptions
sessionOptions = blpapi.SessionOptions()
sessionOptions.setServerHost('localhost')
sessionOptions.setServerPort(8194)
# Create a Session
session = blpapi.Session(sessionOptions)
# Start a Session
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
# Obtain previously opened service
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)
if (overrideID2 is not None and overrideValue2 is not None):
overrides2 = request.getElement("overrides").appendElement()
overrides2.setElement("fieldId", overrideID2)
overrides2.setElement("value", overrideValue2)
if (overrideID3 is not None and overrideValue3 is not None):
overrides3 = request.getElement("overrides").appendElement()
overrides3.setElement("fieldId", overrideID3)
overrides3.setElement("value", overrideValue3)
if (overrideID4 is not None and overrideValue4 is not None):
overrides4 = request.getElement("overrides").appendElement()
overrides4.setElement("fieldId", overrideID4)
overrides4.setElement("value", overrideValue4)
if (overrideID5 is not None and overrideValue5 is not None):
overrides5 = request.getElement("overrides").appendElement()
overrides5.setElement("fieldId", overrideID5)
overrides5.setElement("value", overrideValue5)
if (overrideID6 is not None and overrideValue6 is not None):
overrides6 = request.getElement("overrides").appendElement()
overrides6.setElement("fieldId", overrideID6)
overrides6.setElement("value", overrideValue6)
# Send the request
session.sendRequest(request)
# Process received events
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":
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()
2
要让Erwin的回答在Python中有效,你需要把 overrides.AppendElement() 改成 overrides.AppendElment()。我不太清楚为什么这个拼写错误在Python中会出现,而在其他语言中却没有,但就是这样。
3
不确定这是否有帮助,但在.NET SDK中,应该使用以下语法:
Element overrides = request["overrides"];
Element override1 = overrides.AppendElement();
override1.SetElement("fieldId", "BEST FPERIOD OVERRIDE");
override1.SetElement("value", "BF");