实时新闻标题总览
实时新闻标题通过行情接口订阅。它看起来属于“新闻”,但调用方式仍然是 reqMktData(),并且需要在 genericTickList 中加入 292。
TWS API 收到新闻标题后,会调用 tickNews() 回调。
两种实时新闻
Section titled “两种实时新闻”| 类型 | 合约 | 用途 |
|---|---|---|
| 指定合约新闻 | 股票、期货、期权等普通 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=0BROADTAPE_NEWS_ROWS=0ERROR=reqId=98101;code=10168;msg=请求的市场数据没有订阅。延迟市场数据未启用。ERROR=reqId=98101;code=300;msg=无法使用tickerId找到EId::98101这说明代码请求格式可以发送到 TWS,但实时新闻标题仍受市场数据和新闻权限影响。历史新闻能返回,不代表实时标题一定能推送。
genericTickList 写法
Section titled “genericTickList 写法”| 写法 | 含义 |
|---|---|
"292" | 请求新闻标题 tick,同时可能仍请求普通行情字段。 |
"mdoff,292" | 关闭普通行情字段,只关注新闻标题。 |
"mdoff,292:BRFG" | 只请求指定新闻源的标题。 |
"mdoff,292:BRFG+BRFUPDN" | 同时请求多个新闻源,多个 code 用 + 连接。 |
providerCode 应优先来自 reqNewsProviders() 返回值。不要只因为文档示例里出现某个 code,就假设所有账户都能用。
先用 reqNewsProviders() 确认新闻源,再测试历史新闻。历史新闻能跑通后,再调试实时标题会更容易定位问题。