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

求助:使用blp Bloomberg API wrapper无法获取流式日内Bar数据

问题描述

我想用以下代码获取ES1 Index的OHLC Bars数据,预期返回当前交易时段的数据(未指定起止时间),但程序始终超时,无法接收任何事件:

from blp import blp

with blp.BlpStream(setDefaultSubscriptionService="//blp/mktbar") as bs:
    bs.subscribe({"/ticker/ES1 Index": {"fields": "LAST_PRICE","options": "interval=1"},
                 })
    
    n = 0
    for ev in bs.events(timeout=120):
        print(ev['correlationIds'],[ev['element']["MarketDataEvents"][fld] for fld in ["PRICE_LAST_TIME_RT","LAST_PRICE"]])
        # or just print(ev)   
        n += 1
        if n > 3:
            break

已尝试过以下调整,但均无效:

  • 将interval替换为bar_size
  • 测试不同代码组合,包括指定/不指定时间
  • 尝试使用//blp/refdata替代//blp/mktbar作为订阅服务
解决方案建议

1. 明确服务类型的调用逻辑

//blp/mktbar是实时K线推送服务,//blp/refdata是参考数据查询服务,两者调用方式完全不同:

  • 用//blp/refdata时,不能用BlpStream做订阅,必须用BlpQuery发起一次性查询,指定时间范围和K线参数。
  • 用//blp/mktbar做实时订阅时,需确保标的处于交易时段,且参数格式正确。

2. 修正实时K线订阅的参数与解析逻辑

对于//blp/mktbar服务,正确参数需用bar_size而非interval,同时要匹配K线专属的事件结构,调整后代码如下:

from blp import blp

with blp.BlpStream(setDefaultSubscriptionService="//blp/mktbar") as bs:
    # 订阅ES1 Index的1分钟K线,指定OHLC核心字段
    bs.subscribe({
        "/ticker/ES1 Index": {
            "fields": ["OPEN", "HIGH", "LOW", "LAST_PRICE", "BAR_TIMESTAMP"],
            "options": "bar_size=1"
        }
    })
    
    n = 0
    for ev in bs.events(timeout=120):
        # mktbar的事件结构为MarketBarEvents,而非MarketDataEvents
        if 'MarketBarEvents' in ev['element']:
            bar_data = ev['element']['MarketBarEvents']
            print(f"时间: {bar_data['BAR_TIMESTAMP']}, OHLC: {bar_data['OPEN']}, {bar_data['HIGH']}, {bar_data['LOW']}, {bar_data['LAST_PRICE']}")
        n += 1
        if n > 3:
            break

3. 用参考数据查询当前时段K线

如果需要获取当前交易时段的历史K线(而非实时推送),改用//blp/refdata的bdh接口:

from blp import blp

with blp.BlpQuery() as bq:
    # 查询当前交易日的1分钟K线,替换起止时间为对应交易时段
    res = bq.bdh(
        securities=["ES1 Index"],
        fields=["OPEN", "HIGH", "LOW", "LAST_PRICE"],
        start_date="2024-05-20T09:30:00",
        end_date="2024-05-20T16:00:00",
        options={"periodicityAdjustment": "ACTUAL", "periodicitySelection": "MINUTE", "interval": 1}
    )
    print(res)

4. 基础排查步骤

  • 确认Bloomberg终端已登录,Python客户端可正常连通API(可先用bdp查询单个字段测试,比如bq.bdp("ES1 Index", "LAST_PRICE"))。
  • 检查ES1 Index的交易时段,非交易时段不会推送实时K线,此时用参考数据查询更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:27