Bloomberg API を操作できるように、最近 Python を使い始めましたが、データを Pandas データフレーム (またはパネル) に格納する際に問題が発生しています。コマンド プロンプトで問題なく出力を取得できるので、それは問題ではありません。
非常によく似た質問がここで尋ねられました: Pandas wrapper for Bloomberg api?
ただし、その質問に対する受け入れられた回答で参照されているコードは古い API 用であり、新しいオープン API では機能しません。質問をしたユーザーは、そのコードを新しい API で動作するように簡単に変更できたようですが、私は R で手を握ることに慣れており、これが Python での最初の試みです。
親切なユーザーが、このデータを Pandas に取り込む方法を教えてくれませんか? Python API (ここから入手可能: http://www.openbloomberg.com/open-api/ ) には、私が取り組んできた SimpleHistoryExample.py という名前の例があり、以下に示します。主に「main()」関数の最後にある「while(True)」ループの周りを変更する必要があると思いますが、これまでに試したことにはすべて問題がありました。
事前に感謝します。これが 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..."