
我终于弄明白了。我做了一些combrowse.py侦探工作,并与BBG API下载中的JAVA,C,C
++和.NET示例进行了比较。有趣的是,当涉及到这些事情时,彭博服务台人员知道几乎为零,或者也许我只是在和错误的人交谈。
这是我的代码。
automationHandler.py:
import win32com.clientfrom pythoncom import PumpWaitingMessagesfrom time import time, strftimeimport constantsclass EventHandler: def onProcessEvent(self, result): event = win32com.client.gencache.EnsureDispatch(result) if event.EventType == constants.SUBscriptION_data: self.getData(event) elif event.EventType == constants.SUBscriptION_STATUS: self.getStatus(event) else: self.getMisc(event) def getData(self, event): iterator = event.CreateMessageIterator() while iterator.Next(): message = iterator.Message dataString = '' for fieldIndex, field in enumerate(constants.fields): if message.AsElement.HasElement(field): element = message.GetElement(field) if element.IsNull: thevalue = '' else: thevalue = ', Value: ' + str(element.Value) dataString = dataString + ', (Type: ' + element.Name + thevalue + ')' print strftime('%m/%d/%y %H:%M:%S') + ', MessageType: ' + message.MessageTypeAsString + ', CorrelationId: ' + str(message.CorrelationId) + dataString def getMisc(self, event): iterator = event.CreateMessageIterator() while iterator.Next(): message = iterator.Message print strftime('%m/%d/%y %H:%M:%S') + ', MessageType: ' + message.MessageTypeAsString def getStatus(self, event): iterator = event.CreateMessageIterator() while iterator.Next(): message = iterator.Message if message.AsElement.HasElement('reason'): element = message.AsElement.GetElement('reason') print strftime('%m/%d/%y %H:%M:%S') + ', MessageType: ' + message.MessageTypeAsString + ', CorrelationId: ' + str(message.CorrelationId) + ', Category: ' + element.GetElement('category').Value + ', Description: ' + element.GetElement('description').Value if message.AsElement.HasElement('exceptions'): element = message.AsElement.GetElement('exceptions') exceptionString = '' for n in range(element.NumValues): exceptionInfo = element.GetValue(n) fieldId = exceptionInfo.GetElement('fieldId') reason = exceptionInfo.GetElement('reason') exceptionString = exceptionString + ', (Field: ' + fieldId.Value + ', Category: ' + reason.GetElement('category').Value + ', Description: ' + reason.GetElement('description').Value + ') ' print strftime('%m/%d/%y %H:%M:%S') + ', MessageType: ' + message.MessageTypeAsString + ', CorrelationId: ' + str(message.CorrelationId) + exceptionStringclass bloombergSource: def __init__(self): session = win32com.client.DispatchWithEvents('blpapicom.Session' , EventHandler) session.Start() started = session.OpenService('//blp/mktdata') subscriptions = session.CreateSubscriptionList() for tickerIndex, ticker in enumerate(constants.tickers): if len(constants.interval) > 0: subscriptions.AddEx(ticker, constants.fields, constants.interval, session.CreateCorrelationId(tickerIndex)) else: subscriptions.Add(ticker, constants.fields, session.CreateCorrelationId(tickerIndex))session.Subscribe(subscriptions) endTime = time() + 2 while True: PumpWaitingMessages() if endTime < time(): breakif __name__ == "__main__": aBloombergSource = bloombergSource()constants.py:
ADMIN = 1AUTHORIZATION_STATUS = 11BLPSERVICE_STATUS = 9PARTIAL_RESPonSE = 6PUBLISHING_DATA = 13REQUEST_STATUS = 4RESOLUTION_STATUS = 12RESPonSE = 5SESSION_STATUS = 2SUBscriptION_DATA = 8SUBscriptION_STATUS = 3TIMEOUT = 10TOKEN_STATUS = 15TOPIC_STATUS = 14UNKNOWN = -1fields = ['BID']tickers = ['AUD Curncy']interval = '' #'interval=5.0'
对于历史数据,我使用了以下简单脚本:
import win32com.clientsession = win32com.client.Dispatch('blpapicom.Session')session.QueueEvents = Truesession.Start()started = session.OpenService('//blp/refdata')dataService = session.GetService('//blp/refdata')request = dataService.CreateRequest('HistoricalDataRequest')request.GetElement('securities').AppendValue('5 HK Equity')request.GetElement('fields').AppendValue('PX_LAST')request.Set('periodicitySelection', 'DAILY')request.Set('startDate', '20090119')request.Set('endDate', '20090130')cid = session.SendRequest(request)ADMIN = 1AUTHORIZATION_STATUS = 11BLPSERVICE_STATUS = 9PARTIAL_RESPonSE = 6PUBLISHING_DATA = 13REQUEST_STATUS = 4RESOLUTION_STATUS = 12RESPonSE = 5SESSION_STATUS = 2SUBscriptION_DATA = 8SUBscriptION_STATUS = 3TIMEOUT = 10TOKEN_STATUS = 15TOPIC_STATUS = 14UNKNOWN = -1stayHere = Truewhile stayHere: event = session.NextEvent(); if event.EventType == PARTIAL_RESPonSE or event.EventType == RESPONSE: iterator = event.CreateMessageIterator() iterator.Next() message = iterator.Message securityData = message.GetElement('securityData') securityName = securityData.GetElement('security') fieldData = securityData.GetElement('fieldData') returnList = [[0 for col in range(fieldData.GetValue(row).NumValues+1)] for row in range(fieldData.NumValues)] for row in range(fieldData.NumValues): rowField = fieldData.GetValue(row) for col in range(rowField.NumValues+1): colField = rowField.GetElement(col) returnList[row][col] = colField.Value stayHere = False breakelement = Noneiterator = Nonemessage = Noneevent = Nonesession = Noneprint returnList欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)