python 帮助台_通过Bloomberg的新数据API(COM v3)与Python的异步数据?

我终于弄明白了.我做了一些combrowse.py侦探工作,我在BBG API下载中与JAVA,C,C和.NET示例进行了比较.有趣的是,Bloomberg帮助台人员在谈到这些事情时几乎无知,或者我只是在与错误的人交谈.

这是我的代码.

asynchronousHandler.py:

import win32com.client

from pythoncom import PumpWaitingMessages

from time import time, strftime

import constants

class 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) + exceptionString

class 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():

break

if __name__ == "__main__":

aBloombergSource = bloombergSource()

constants.py:

ADMIN = 1

AUTHORIZATION_STATUS = 11

BLPSERVICE_STATUS = 9

PARTIAL_RESPONSE = 6

PUBLISHING_DATA = 13

REQUEST_STATUS = 4

RESOLUTION_STATUS = 12

RESPONSE = 5

SESSION_STATUS = 2

SUBSCRIPTION_DATA = 8

SUBSCRIPTION_STATUS = 3

TIMEOUT = 10

TOKEN_STATUS = 15

TOPIC_STATUS = 14

UNKNOWN = -1

fields = ['BID']

tickers = ['AUD Curncy']

interval = '' #'interval=5.0'

对于历史数据,我使用了这个简单的脚本

import win32com.client

session = win32com.client.Dispatch('blpapicom.Session')

session.QueueEvents = True

session.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 = 1

AUTHORIZATION_STATUS = 11

BLPSERVICE_STATUS = 9

PARTIAL_RESPONSE = 6

PUBLISHING_DATA = 13

REQUEST_STATUS = 4

RESOLUTION_STATUS = 12

RESPONSE = 5

SESSION_STATUS = 2

SUBSCRIPTION_DATA = 8

SUBSCRIPTION_STATUS = 3

TIMEOUT = 10

TOKEN_STATUS = 15

TOPIC_STATUS = 14

UNKNOWN = -1

stayHere = True

while 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

break

element = None

iterator = None

message = None

event = None

session = None

print returnList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值