Wie Speichere ich Daten aus dem Bloomberg-API in ein Pandas dataframe?
Ich habe vor kurzem angefangen mit Python so konnte ich die Interaktion mit den Bloomberg API, und ich habe einige Probleme beim speichern der Daten in ein Pandas dataframe (oder eine Platte). Ich kann die Ausgabe in der Eingabeaufforderung einfach gut, so dass ist nicht ein Problem.
Eine sehr ähnliche Frage wurde hier gestellt:
Pandas-wrapper für die Bloomberg api?
Den referenzierten code in der akzeptierten Antwort für diese Frage ist für die alte API, jedoch, und es funktioniert nicht für das neue, offene API. Anscheinend ist der user, der die Frage stellt, war in der Lage, leicht zu ändern, der code für die Arbeit mit der neuen API, aber ich bin gewohnt, meine hand gehalten in R, und dies ist mein erstes Unterfangen mit Python.
Könnte einige wohlwollende user zeigen mir, wie man diese Daten in Pandas? Es gibt ein Beispiel in der Python-API (verfügbar hier: http://www.openbloomberg.com/open-api/) genannt SimpleHistoryExample.py ich arbeite mit dem habe ich unten aufgeführt. Ich glaube, dass werde ich ändern müssen, vor allem um die " while(True)' Schleife, die gegen das Ende der 'main ()' - Funktion, aber alles, was ich bisher ausprobiert habe hat hatte Probleme.
Vielen Dank im Voraus, und ich hoffe, dass dies helfen kann, um jemand mit Pandas für die Finanzen.
# 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..."
InformationsquelleAutor der Frage Danny | 2013-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich benutze tia (https://github.com/bpsmith/tia/blob/master/examples/datamgr.ipynb)
Es schon downloads von Daten wie Pandas dataframe aus bloomberg.
Sie können die download-Historie für mehrere Ticker in einem einzigen Anruf und auch download einige bloombergs Referenz-Daten (Central Bank date treffen, Urlaube für ein bestimmtes Land, etc)
Und Sie gerade installieren Sie es mit pip.
Dieser link ist voll von Beispielen, aber der download historischer Daten ist so einfach wie:
und df ist ein pandas dataframe.
Hoffe es hilft
InformationsquelleAutor der Antwort Gabriel
Habe ich gerade veröffentlicht, das helfen könnte
http://github.com/alex314159/blpapiwrapper
Es ist im Grunde nicht sehr intuitiv zu entpacken die Meldung, aber das ist was für mich funktioniert, wo strData ist eine Liste von bloomberg Felder, zum Beispiel ['PX_LAST','PX_OPEN']:
InformationsquelleAutor der Antwort alex314159
Habe ich mit pybbg zu tun diese Art von Sachen. Sie können es hier erhalten:
https://github.com/bpsmith/pybbg
Import das Paket und Sie können dann tun (diese ist im Quellcode bbg.py Datei):
Vorteile:
Einfach zu bedienen, minimale boilerplate, und analysiert Indizes und Daten für Sie.
Blockiert. Da Sie erwähnen, R, ich nehme an, Sie sind mit dieser in irgendeiner Art von einer interaktiven Umgebung, wie IPython. Also das ist, was Sie wollen , anstatt zu Durcheinander herum mit callbacks.
Kann es auch historische (D. H. den Preis der Serie), intraday-und bulk-Daten Anfrage (kein tick-Daten noch nicht).
Nachteile:
Arbeitet nur in Windows, soweit ich weiß, (du musst BB workstationg installiert und läuft).
Folgenden auf den oben, es hängt von der 32-bit-OLE-api für Python. Es funktioniert nur mit der 32 bit-version - Sie müssen also die 32-bit-python und 32-bit-OLE-Bindungen
Gibt es einige Fehler. In meiner Erfahrung, die beim abrufen von Daten für eine Reihe von Instrumenten, die es dazu neigt zu hängen IPython. Nicht sicher, was bewirkt dieser.
Basierend auf den letzten Punkt, würde ich vorschlagen, dass, wenn Sie immer große Mengen von Daten, die Sie abrufen und speichern Sie diese in einem excel-sheet (ein instrument pro Blatt), und dann importieren Sie diese.
read_excel
ist nicht effizient, dies zu tun, müssen Sie verwenden den ExcelReader (?) Objekt und dann die Iteration über die Blätter. Ansonsten, mit read_excel öffnen Sie die Datei jedes mal, wenn Sie Lesen ein Blatt; das kann Jahre dauern.InformationsquelleAutor der Antwort Luciano
Tia https://github.com/bpsmith/tia ist die beste, die ich gefunden habe, und ich habe Sie alle ausprobiert... Es ermöglicht Ihnen zu tun:
Dem Zwischenspeichern ist auch ganz nett.
Beide https://github.com/alex314159/blpapiwrapper und https://github.com/kyuni22/pybbg die grundlegende Arbeit (danke Jungs!) aber Schwierigkeiten haben, mit mehrere Wertpapiere/Felder, sowie überschreibt, die Sie unweigerlich benötigen.
Die eine Sache, diese https://github.com/kyuni22/pybbg hat, dass tia gar nicht haben, ist die bds(Sicherheits -, Feld).
InformationsquelleAutor der Antwort citynorman
Können Sie auch pdblp für diese (Disclaimer: ich bin der Autor). Es gibt ein tutorial zeigen eine ähnliche Funktionalität zur Verfügung, die hier https://matthewgilbert.github.io/pdblp/tutorial.htmldie Funktionalität könnte erreicht werden mit so etwas wie
InformationsquelleAutor der Antwort mgilbert
Einen richtigen Bloomberg-API für python jetzt vorhanden ist, welche nicht mit COM. Es hat all die Haken, damit Sie repliziert die Funktionalität des Excel-add-in, mit dem offensichtlichen Vorteil einer richtigen Programmiersprache Endpunkt. Die request-und response-Objekte sind ziemlich schlecht dokumentiert, und sind ziemlich stumpf. Dennoch, die Beispiele in der API sind gut, und einige spielen um mit dem inspect-Modul und Druck-response-Nachrichten sollten erhalten Sie bis zu Geschwindigkeit. Leider ist die standard-terminal-Lizenz funktioniert nur auf Windows. Für *nix-du brauchst eine server-Lizenz (noch teurer). Ich habe es ziemlich ausführlich.
https://www.bloomberg.com/professional/support/api-library/
InformationsquelleAutor der Antwort Thomas Browne