我正在获取“历史日”响应,并试图对其进行更改,以便我可以给它一个任意大小的list()
,它只会带回一天的时间。它将以字典的形式返回它,其值为数字。
我的问题是,该命令不返回任何内容,并且似乎没有创建来自Blloomberg的多个请求。下面的代码和回复:
# SimpleHistoryExample.py
# Include the install blpapi
from __future__ import print_function
from __future__ import absolute_import
import blpapi
import os
import re
import pandas as pd
import datetime
from optparse import OptionParser
from pandas.tseries.offsets import BMonthEnd
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 query_BloombergTicker(ticker_Name, ticker_Query, ticker_Start, ticker_End):
if type(ticker_Name) != type(list()):
print('Tickers must be as a list')
return
options = parseCmdLine()
query = dict()
# 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')
for ticker in ticker_Name:
request.getElement("securities").appendValue(ticker)
request.getElement("fields").appendValue(ticker_Query)
request.set("periodicityAdjustment", "ACTUAL")
request.set("periodicitySelection", "DAILY")
request.set("startDate", ticker_Start)
request.set("endDate", ticker_End)
request.set("maxDataPoints", 1000)
# 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 str(msg.messageType()) == 'HistoricalDataResponse':
for ticker in ticker_Name:
query[ticker] = msg.getElement('securityData').getElement('fieldData').getValue().getElement(ticker).getValue()
if ev.eventType() == blpapi.Event.RESPONSE:
# Response completely received, so we could exit
break
finally:
# Stop the session
session.stop()
return query
def main():
prevMonthEnd = '20191211'
TICKERS = ["EURUSD Curncy"]
EURUSD = query_BloombergTicker(TICKERS, "PX_LAST", prevMonthEnd, prevMonthEnd)
print('THis is ')
print(EURUSD)
TICKERS = ["GBPUSD Curncy", "EURGBP Curncy", "EURSEK Curncy"]
multi = query_BloombergTicker(TICKERS, "PX_LAST", prevMonthEnd, prevMonthEnd)
print('This is ')
print(multi)
if __name__ == "__main__":
print("Starting Calculation Agent")
try:
main()
except KeyboardInterrupt:
print("Ctrl+C pressed. Stopping...")
回复是:
Starting Calculation Agent
SessionConnectionUp = {
server = "localhost:8888"
encryptionStatus = "Clear"
}
SessionStarted = {
initialEndpoints[] = {
initialEndpoints = {
address = "localhost:8888"
}
}
}
ServiceOpened = {
serviceName = "//blp/refdata"
}
HistoricalDataResponse = {
securityData = {
security = "EURUSD Curncy"
eidData[] = {
}
sequenceNumber = 0
fieldExceptions[] = {
}
fieldData[] = {
fieldData = {
date = 2019-12-11
PX_LAST = 1.113000
}
}
}
}
THis is
{}
SessionConnectionUp = {
server = "localhost:8888"
encryptionStatus = "Clear"
}
SessionStarted = {
initialEndpoints[] = {
initialEndpoints = {
address = "localhost:8888"
}
}
}
ServiceOpened = {
serviceName = "//blp/refdata"
}
HistoricalDataResponse = {
securityData = {
security = "GBPUSD Curncy"
eidData[] = {
}
sequenceNumber = 0
fieldExceptions[] = {
}
fieldData[] = {
fieldData = {
date = 2019-12-11
PX_LAST = 1.319600
}
}
}
}
This is
{}
Process finished with exit code 0