Недавно я начал использовать Python, чтобы я мог взаимодействовать с API Bloomberg, и у меня возникли проблемы с хранением данных в DataFrame Pandas (или панели). Я могу получить вывод в командной строке просто отлично, так что это не проблема.
Здесь был задан очень похожий вопрос: Pandas обертка для Bloomberg api?
Указанный код в принятом ответе на этот вопрос для старого API, однако, не работает для нового открытого API. По-видимому, пользователь, который задал вопрос, смог легко изменить этот код для работы с новым API, но я привык к тому, что моя рука была в R, и это мое первое начинание с Python.
Может ли какой-нибудь доброжелательный пользователь показать мне, как получить эти данные в Pandas? В API Python есть пример: http://www.openbloomberg.com/open-api/), который называется SimpleHistoryExample.py, что я работал с этим я ' ниже. Я считаю, что мне нужно будет изменить в основном вокруг цикла while (True) в конце функции main(), но все, что я пробовал до сих пор, имеет проблемы.
Спасибо заранее, и я надеюсь, что это может помочь любому, кто использует Pandas для финансирования.
# SimpleHistoryExample.py
import blpapi
from optparse import OptionParser
def parseCmdLine():
parser = OptionParser(description="Retrieve reference data.")
parser.add_option("-a",
"--ip",
dest="host",
help="server name or IP (default: %default)",
metavar="ipAddress",
default="localhost")
parser.add_option("-p",
dest="port",
type="int",
help="server port (default: %default)",
metavar="tcpPort",
default=8194)
(options, args) = parser.parse_args()
return options
def main():
options = parseCmdLine()
# Fill SessionOptions
sessionOptions = blpapi.SessionOptions()
sessionOptions.setServerHost(options.host)
sessionOptions.setServerPort(options.port)
print "Connecting to %s:%s" % (options.host, options.port)
# 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 historical data from
if not session.openService("//blp/refdata"):
print "Failed to open //blp/refdata"
return
# Obtain previously opened service
refDataService = session.getService("//blp/refdata")
# Create and fill the request for the historical data
request = refDataService.createRequest("HistoricalDataRequest")
request.getElement("securities").appendValue("IBM US Equity")
request.getElement("securities").appendValue("MSFT US Equity")
request.getElement("fields").appendValue("PX_LAST")
request.getElement("fields").appendValue("OPEN")
request.set("periodicityAdjustment", "ACTUAL")
request.set("periodicitySelection", "DAILY")
request.set("startDate", "20061227")
request.set("endDate", "20061231")
request.set("maxDataPoints", 100)
print "Sending Request:", request
# 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:
print msg
if ev.eventType() == blpapi.Event.RESPONSE:
# Response completly received, so we could exit
break
finally:
# Stop the session
session.stop()
if __name__ == "__main__":
print "SimpleHistoryExample"
try:
main()
except KeyboardInterrupt:
print "Ctrl+C pressed. Stopping..."