跳转到内容

实时新闻标题总览

实时新闻标题通过行情接口订阅。它看起来属于“新闻”,但调用方式仍然是 reqMktData(),并且需要在 genericTickList 中加入 292

TWS API 收到新闻标题后,会调用 tickNews() 回调。

官方参考:IBKR Campus - TWS API 文档

类型合约用途
指定合约新闻股票、期货、期权等普通 Contract订阅某个标的相关的新闻标题。
BroadTape 新闻secType="NEWS" 的新闻合约订阅某个新闻源的广泛新闻流。
app.reqMktData(reqId, contract, "mdoff,292:BRFG+BRFUPDN", False, False, [])

292 是新闻标题 tick。mdoff 常用于关闭普通行情字段,只保留新闻相关数据,避免同时触发不需要的价格行情请求。冒号后面的 BRFG+BRFUPDN 来自 reqNewsProviders() 返回的 provider code。

接口 / 回调说明
reqMktData()建立实时新闻标题订阅。
tickNews()接收标题、来源、文章 ID 和额外数据。
cancelMktData()取消实时新闻标题订阅。
error()处理权限、新闻源无效、行情订阅不足等错误。

示例中新闻提供商和历史新闻可用,但指定合约实时新闻标题没有订阅权限:

CONTRACT_NEWS_ROWS=0
BROADTAPE_NEWS_ROWS=0
ERROR=reqId=98101;code=10168;msg=请求的市场数据没有订阅。延迟市场数据未启用。
ERROR=reqId=98101;code=300;msg=无法使用tickerId找到EId::98101

这说明代码请求格式可以发送到 TWS,但实时新闻标题仍受市场数据和新闻权限影响。历史新闻能返回,不代表实时标题一定能推送。

写法含义
"292"请求新闻标题 tick,同时可能仍请求普通行情字段。
"mdoff,292"关闭普通行情字段,只关注新闻标题。
"mdoff,292:BRFG"只请求指定新闻源的标题。
"mdoff,292:BRFG+BRFUPDN"同时请求多个新闻源,多个 code 用 + 连接。

providerCode 应优先来自 reqNewsProviders() 返回值。不要只因为文档示例里出现某个 code,就假设所有账户都能用。

先用 reqNewsProviders() 确认新闻源,再测试历史新闻。历史新闻能跑通后,再调试实时标题会更容易定位问题。