使用Interactive Brokers API (IBAPI)异步与asyncio或PyQt5
项目描述
注意
该项目已发展成为 IB-insync,所有开发都在那里进行。
代码移植
TWSClient 已迁移到 ib_insync.client.Client (许多改进);
TWSClientQt:新的 Client 可以与PyQt和quamash一起使用。
简介
tws_async 包允许使用 asyncio 标准库或 PyQt5 框架以异步和单线程方式使用Interactive Brokers (IBAPI) 的Python API。
这提供了一种比多线程更简单、更安全、更高效的并发方法。
安装
使用pip安装
pip3 install -U tws_async
注意,在某些系统上,pip3 命令只是 pip。
需要Python版本3.5或更高版本以及 Interactive Brokers Python API。
用法
此包提供了两个客户端,可以用作IBAPI提供的标准EClient的替代品
TWSClient,适用于asyncio事件循环;
TWSClientQt,适用于PyQt5事件循环。
这些客户端还继承自ibapi.wrapper.EWrapper,可以使用标准IBAPI版本的方式进行使用。异步客户端使用自己的事件驱动网络代码来替换标准EClient的网络代码,并且将EClient.run()的无穷循环替换为事件循环。
为了简化与合约的工作,此包提供了可以用于任何期望ibapi.contract.Contract的地方的Contract、Stock、Option、Future、Forex、Index、CFD和Commodity类。一些简单案例的示例是Stock('AMD')、Forex('EURUSD')、CFD('IBUS30')或Future('ES', '201612', 'GLOBEX')。要指定更复杂的合约,任何属性都可以作为关键字给出。
要了解更多信息,请参阅官方IBAPI文档或查看这些示例用例
历史数据下载器
HistRequester下载历史数据并将其保存到CSV文件中;histrequester演示说明了如何使用它。
实时流交易
tick流订阅实时交易数据。
Jupyter笔记本
要在Jupyter笔记本中完全交互式地使用Interactive Brokers API,请查看示例笔记本。
可以使用命令jupyter notebook启动Jupyter。
此笔记本使用客户端的Qt版本,其中Qt事件循环在笔记本顶部使用%gui qt5指令启动。不需要调用客户端的run()方法。
关于在笔记本中使用asycio的注意事项
目前似乎没有一种单线程方式可以直接在Jupyter中运行asyncio事件循环。可以做到的是使用Qt事件循环(它与Jupyter内核有良好的集成)和quamash适配器。使用quamash,Qt事件循环用于驱动asyncio事件循环。这可以通过在笔记本顶部放置以下代码来实现
%gui qt5
import asyncio, quamash
loop = quamash.QEventLoop()
asyncio.set_event_loop(loop)
quamash和Jupyter结合使用时不起作用的是loop.run_until_finished方法。它可以像这样修补
def run_until_complete(self, future):
future = asyncio.ensure_future(future)
qApp = qt.QApplication.instance()
while not future.done():
qApp.processEvents(qt.QEventLoop.WaitForMoreEvents)
return future.result()
quamash.QEventLoop.run_until_complete = run_until_complete
客户端的asyncio版本依赖于loop.run_until_finished来同步连接。因此,为了在笔记本中运行asyncio客户端,请应用修补程序或直接以异步方式连接(即,在连接调用中给出asyncConnect=True)。
更改日志
版本0.5.7
为endDateTime格式化修复HistRequester
版本0.5.6
更新HistRequester到API的9.73.04版本
版本0.5.5
进行了一些简化
版本0.5.4
客户端的connect()调用现在将默认阻塞,直到客户端准备好服务请求。
为两个客户端添加了getReqId()方法。
为客户端添加了dataHandlingPre()和dataHandlingPost()事件挂钩。
添加了日志记录。
添加了util模块。
文件 tws_async.py 重命名为 twsclient.py,tws_asyncqt.py 重命名为 twsclientqt.py。
版本 0.5.3
向 client.connect() 方法添加了可选的 asyncConnect 参数。默认现在为同步连接(阻塞直到连接成功)。
修复了 HistRequester 在下载每日数据时的错误。
版本 0.5.0
初始 pip 包发布。
祝好运,享受编程!
- 作者:
Ewald de Wit <ewald.de.wit@gmail.com>
tws_async-0.5.7-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 937d88d936e7233082b1e1068ab1cfdf7c2438e40e76ca89e4039c45618a5f5a |
|
MD5 | 08d8d918e8c101c0f4b6ce37a0c1632e |
|
BLAKE2b-256 | 302ef2eb8002b07976aa91f408a97e9ce8172c525183a89488e21fe51a053860 |