You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BLPInterface调取彭博历史日内tick数据的参数设置问题

解决方案

方案1:修改BLPInterface源码支持日内tick请求

你遇到的问题有两个核心原因:

  • Excel BDH的参数IntrRw是彭博桌面端的别名,底层blpapi的请求字段不直接叫这个名字,且逐笔tick数据对应的请求类型本身就不是HistoricalDataRequest,而是IntradayTickRequest
  • BLPInterface的historicalRequest方法仅硬编码处理了日终数据所需的几个核心参数,额外传入的kwargs没有被正确映射到彭博请求对象中

修改步骤:

  1. 找到BLPInterface中historicalRequest的实现代码,参照彭博官方API文档,新增intradayTickRequest方法:
    • 实例化请求时改用"IntradayTickRequest"类型
    • 支持传入eventTypes参数(指定要拉取bid、ask、trade等事件)、includeConditionCodes等tick专属参数
    • 直接处理带时分秒的起止时间即可,不需要额外传类似IntrRw的参数,IntradayTickRequest默认返回对应时间区间内的所有逐笔数据
  2. 如果你不想新增方法,也可以修改原historicalRequest的参数处理逻辑,新增分支判断:如果传入的起止时间包含时分秒,自动切换请求类型,同时把你需要的额外参数遍历塞进request对象中,避免出现Sub-element不存在的报错。

方案2:直接调用原生blpapi接口拉取数据

如果你不想修改停更的BLPInterface代码,可以直接用彭博官方的blpapi库实现需求,示例代码如下:

import blpapi
import datetime as dt

# 初始化会话
sessionOptions = blpapi.SessionOptions()
sessionOptions.setServerHost('localhost')
sessionOptions.setServerPort(8194)
session = blpapi.Session(sessionOptions)
session.start()
session.openService('//blp/refdata')
refDataService = session.getService('//blp/refdata')

# 构造日内逐笔tick请求
request = refDataService.createRequest('IntradayTickRequest')
request.set('security', 'SPX Index')
request.append('eventTypes', 'BID')
request.append('eventTypes', 'ASK')
request.set('startDateTime', dt.datetime(2021, 9, 17, 16, 29, 0))
request.set('endDateTime', dt.datetime(2021, 9, 17, 16, 31, 0))
# 可选配置:是否包含条件码、是否返回成交量等
request.set('includeConditionCodes', False)
request.set('includeSize', True)

# 发送请求并处理返回
session.sendRequest(request)
data = []
while True:
    event = session.nextEvent(500)
    for msg in event:
        if msg.hasElement('tickData'):
            tickData = msg.getElement('tickData')
            tickArray = tickData.getElement('tickData')
            for i in range(tickArray.numValues()):
                tick = tickArray.getValueAsElement(i)
                data.append({
                    'time': tick.getElementAsDatetime('time'),
                    'type': tick.getElementAsString('type'),
                    'value': tick.getElementAsFloat('value'),
                    'size': tick.getElementAsInteger('size')
                })
    if event.eventType() == blpapi.Event.RESPONSE:
        break
session.stop()
print(data)

原生接口完全支持所有彭博数据请求参数,不需要依赖第三方封装,适配性更强。

内容的提问来源于stack exchange,提问作者user3556757

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:06:03