【TWS API 翻译系列】21、TWS API和IB中的新闻和公告
作者:yunjinqi   类别:    日期:2022-01-03 22:25:19    阅读:1504 次   消耗积分:0 分    

新闻

API 新闻需要特定于 API 的新闻订阅;TWS 中的大多数新闻服务在 API 中也不可用。从TWS v966开始,默认情况下,帐户中启用了三个API新闻服务,并且可以从API获得。它们是:

  • Briefing.com 一般市场专栏 (BRFG)

  • Briefing.com 分析师行动 (BRFUPDN)

  • 道琼斯时事通讯 (DJNL)

所有TWS版本还提供四项额外的新闻服务,这些服务需要首先在帐户管理中进行特定的API订阅。它们的数据费用与仅在TWS中订阅相同新闻的数据费用不同。与所有订阅一样,它们仅适用于进行订阅时所使用的特定TWS用户名:

  • Briefing Trader (BRF)

  • Benzinga Pro (BZ)

  • Fly on the Wall(飞)

处理新闻的 API 函数能够查询可用的新闻,实时订阅新闻以在发布时接收标题,请求特定的新闻文章,并返回缓存在系统中的新闻报道的历史列表。

检查订阅的新闻来源

在帐户中添加或删除 API 新闻订阅是通过帐户管理完成的。从API中,可以使用 IBApi::EClient::reqNewsProviders. 函数检索当前订阅的新闻源。请注意,此功能仅在 API v973.02 中可用。

self.reqNewsProviders()

可用订阅的新闻源列表将返回到IBApi::EWrapper::newsProviders函数

def newsProviders(self, newsProviders: ListOfNewsProviders):
    print("NewsProviders: ")
    for provider in newsProviders:
        print("NewsProvider.", provider)

合约特定新闻

有两种方法可以通过API订阅实时新闻标题。您可以请求合同特定新闻或BroadTape新闻。另见BroadTape新闻列表

**重要提示:**为了通过TWS API获取新闻源,您需要通过您的帐户管理获取相关的API特定订阅。

当调用IBApi.EClient.reqMktData时,对于特定的IBApi.Contract,您将遵循与任何其他基本合约相同的格式约定。新闻来源由通用TickList标识。

注意:如果用户名尚未添加相应的 API 新闻订阅,则将返回错误消息"无效的刻度线类型"。

# Without the API news subscription this will generate an "invalid tick type" errorself.reqMktData(1005, ContractSamples.USStockAtSmart(), "mdoff,292:BRFG", False, False, [])self.reqMktData(1006, ContractSamples.USStockAtSmart(), "mdoff,292:BRFG+DJNL", False, False, [])self.reqMktData(1007, ContractSamples.USStockAtSmart(), "mdoff,292:BRFUPDN", False, False, [])self.reqMktData(1008, ContractSamples.USStockAtSmart(), "mdoff,292:DJ-RT", False, False, [])

BroadTape News

对于BroadTape News,您可以为特定新闻源指定IBApi.Contract。这由符号和交换唯一标识。可以通过IBApi.EClientSocket.reqContractDetails请求轻松获取工具的符号。

新闻合约示例

Briefing Trader

contract = Contract()contract.symbol  = "BRF:BRF_ALL"contract.secType = "NEWS"contract.exchange = "BRF"

Benzinga Pro

contract = Contract()contract.symbol = "BZ:BZ_ALL"contract.secType = "NEWS"contract.exchange = "BZ"

Fly on the Wall

contract = Contract()contract.symbol  = "FLY:FLY_ALL"contract.secType = "NEWS"contract.exchange = "FLY"

然后,您可以调用IBApi.EClient.reqMktData来获取广泛的 tape新闻源。

self.reqMktData(1009, ContractSamples.BTbroadtapeNewsFeed(), "mdoff,292", False, False, [])self.reqMktData(1010, ContractSamples.BZbroadtapeNewsFeed(), "mdoff,292", False, False, [])self.reqMktData(1011, ContractSamples.FLYbroadtapeNewsFeed(), "mdoff,292", False, False, [])

**重要:**对于Briefing Trader,通过API的 live head lines仅直接从 Briefing.com 提供Briefing Trader的订阅者通过API访问订阅live head lines。如需了解更多信息并提交 API 应用权限,请直接通过dbeasley@briefing.com.联系 Briefing.com

生成的新闻标题将返回到具有新闻标题、时间戳和文章 ID 的 IBApi::EWrapper::tickNews 函数。文章 ID 可用于使用下面的函数IBApi::EClient::reqNewsArticle检索新闻文章的正文。

def tickNews(self, tickerId: int, timeStamp: int, providerCode: str,
                  articleId: str, headline: str, extraData: str):
    print("TickNews. TickerId:", tickerId, "TimeStamp:", timeStamp,
    	"ProviderCode:", providerCode, "ArticleId:", articleId,
        "Headline:", headline, "ExtraData:", extraData)

历史新闻标题

通过适当的 API 新闻订阅,可以使用从 API v973.02 开始的 IBApi::EClient::reqHistoricalNews 函数从 API 请求历史新闻标题。由此产生的标题将返回到IBApi::EWrapper::historicalNews.

self.reqHistoricalNews(10003, 8314, "BRFG", "", "", 10, [])

请求新闻文章

使用上述函数之一请求新闻标题后,可以通过调用从 API v973.02 开始的函数 IBApi::EClient::reqNewsArticle 来请求带有返回的文章 ID 的新闻文章的正文。新闻文章的正文返回到 IBApi::EWrapper::newsArticle.。

self.reqNewsArticle(10002,"BRFG", "BRFG$04fb9da2", [])

IB公告

IB不时发送重要的新闻公告,可以通过TWSAPI通过IBApi.EClient.reqNewsBulletins访问。

self.reqNewsBulletins(True)

每当有新的公告时,公告都会通过IBApi.EWrapper.updateNewsBulletin提供:

class TestWrapper(wrapper.EWrapper):# ...
    def updateNewsBulletin(self, msgId: int, msgType: int, newsMessage: str,
                            originExch: str):
         super().updateNewsBulletin(msgId, msgType, newsMessage, originExch)
         print("News Bulletins. MsgId:", msgId, "Type:", msgType, "Message:", newsMessage,
               "Exchange of Origin: ", originExch)

要停止接收公告,您需要取消订阅:

 self.cancelNewsBulletins()

TWS API相关的教程

【TWS API使用教程1】—如何在自己创建的client和TWS之间创建一个连接,并请求当前的时间
【TWS API使用教程2】—如何使用 TWS API在ubuntu和windows上分别设置contract、获取contract详细信息、设置order、下单、获取持仓信息、获取账户信息
【TWS API使用教程3】—如何使用TWS API从盈透证券中设置contract及获取contract的信息?
【TWS API使用教程4】—如何使用TWS API在盈透证券中设置order?
【TWS API使用教程5】—如何使用TWS API在盈透证券中下单(place order)、获取订单信息、获取持仓、获取账户汇总信息?
【TWS API使用教程6】—如何使用TWS API在盈透证券中获取数据?
【TWS API 使用教程7】如何使用TWS API 从盈透证券中筛选满足一定条件的contract?
【TWS API 使用教程8】一个基于TWS API的简单的程序化策略


版权所有,转载本站文章请注明出处:云子量化, http://www.woniunote.com/article/87
上一篇:【TWS API 翻译系列】20、TWS API和IB中的显示组
下一篇:【答读者问38】backtrader如何自定义技术指标?