跳转到内容

请求指定合约新闻

指定合约新闻用于订阅某个标的相关的实时新闻标题。例如订阅 IBM 股票相关的新闻。

它使用普通行情接口 reqMktData(),关键是 genericTickList"mdoff,292:BRFG+BRFUPDN" 这类新闻源配置。

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

from ibapi.contract import Contract
def ibm_stock() -> Contract:
"""IBM 股票合约,用于请求指定合约新闻标题。"""
contract = Contract()
contract.symbol = "IBM"
contract.secType = "STK"
contract.exchange = "SMART"
contract.currency = "USD"
return contract
app.reqMktData(
98101,
ibm_stock(),
"mdoff,292:BRFG+BRFUPDN",
False,
False,
[],
)
参数中文说明
98101请求编号,后续 tickNews()error() 会带回。
ibm_stock()要订阅新闻的合约。
"mdoff,292:BRFG+BRFUPDN"关闭普通行情字段,并从指定新闻源请求新闻标题 tick。
第一个 Falsesnapshot=False,新闻标题是订阅式数据。
第二个 FalseregulatorySnapshot=False,这里不请求监管快照。
[]额外选项列表,普通场景为空。
CONTRACT_NEWS_ROWS=0
ERROR=reqId=98101;code=10168;msg=请求的市场数据没有订阅。延迟市场数据未启用。
ERROR=reqId=98101;code=300;msg=无法使用tickerId找到EId::98101

示例账户历史新闻可用,但指定合约实时新闻标题没有订阅权限。遇到这个结果时,代码结构不一定错,先检查市场数据和新闻标题订阅权限。

app.cancelMktData(98101)

如果请求没有真正建立,取消时可能看到 300。这通常表示 TWS 没有找到这个 tickerId 对应的活动订阅。