通过使用Python的Bloomberg新数据API(COM v3)异步数据?

通过使用Python的Bloomberg新数据API(COM v3)异步数据?,第1张

通过使用Python的Bloomberg新数据API(COM v3)异步数据?

我终于弄明白了。我做了一些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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5673704.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存