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

IG Lightstreamer服务器始终每秒推送更新,无法按指定间隔获取K线数据

IG Lightstreamer服务器始终每秒推送更新,无法按指定间隔获取K线数据

我之前用Python对接IG的Lightstreamer获取K线数据时也遇到过一模一样的问题!当时折腾了好一阵子才找到原因,给你几个排查和解决的方向:

  • 先修正代码的类定义顺序:你的代码里SubListener类是在创建订阅之后才定义的,这在Python中会直接抛出NameError(除非你实际运行的代码顺序不是这样)。正确的做法是先定义监听器类,再创建它的实例添加到订阅中,不然代码根本跑不起来。调整后的基础代码结构如下:
from lightstreamer.client import *

loggerProvider = ConsoleLoggerProvider(ConsoleLogLevel.WARN)
LightstreamerClient.setLoggerProvider(loggerProvider)

# 先定义监听器类
class SubListener:
  def onItemUpdate(self, update):
    # 后续添加过滤逻辑
    print(update.getValue("BID_CLOSE"))

ls_client = LightstreamerClient("https://demo-apd.marketdatasystems.com", None)
ls_client.connectionDetails.setUser("...")
ls_client.connectionDetails.setPassword("...")
ls_client.connect()

subscription = Subscription(
    mode="MERGE",
    items=["CHART:CS.D.BITCOIN.CFD.IP:1MINUTE"],
    fields=["BID_CLOSE", "CONFIRMED", "TIMESTAMP"])  # 补充关键字段
subscription.addListener(SubListener())
# 请求快照,确保初始能拿到最新的已确认K线
subscription.setRequestedSnapshot("YES")
ls_client.subscribe(subscription)

input()

ls_client.unsubscribe(subscription)
ls_client.disconnect()
  • 核心问题:区分实时中间数据和已确认K线:你看到的每秒更新其实是当前正在形成的K线的实时中间数据,而不是完整的分钟级K线。IG的CHART类item在MERGE模式下会实时推送当前K线的最新bid/ask价格,只有当K线周期结束时,服务器才会将该K线标记为已确认(CONFIRMED字段值为1)。而IG的Streaming Companion默认只展示已确认的完整K线,所以你看到的是每分钟更新一次。

要过滤出真正的分钟级K线数据,只需在监听器里判断CONFIRMED字段的值:

class SubListener:
  def onItemUpdate(self, update):
    # 仅处理已确认的完整K线
    if update.getValue("CONFIRMED") == "1":
        close_price = update.getValue("BID_CLOSE")
        timestamp = update.getValue("TIMESTAMP")
        print(f"已确认的1分钟K线收盘价: {close_price},时间戳: {timestamp}")
  • 额外优化:请求初始快照:通过subscription.setRequestedSnapshot("YES")让服务器在连接成功后推送最新的一条已确认K线,避免错过订阅前已经生成的K线数据。

这样调整后,你应该就能只收到每分钟一次的完整K线更新了,和Streaming Companion的表现完全一致。

备注:内容来源于stack exchange,提问作者Ruben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:23:16