ib_insync无法连接Interactive Brokers TWS问题求助
昨日代码运行正常,今日未做任何修改,却无法通过ib_insync连接Interactive Brokers TWS,报错发生在尝试连接之后。
连接代码如下:
from ib_insync import IB ib = IB() ib.connect('127.0.0.1', 7497, clientId=1, readonly=True)
报错信息:
Traceback (most recent call last):
File "C:\Users\Yar\AppData\Local\Programs\Python\Python310\lib\asyncio\tasks.py", line 458, in wait_for
fut.result()
asyncio.exceptions.CancelledErrorThe above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Yar\PycharmProjects\positionkeeping2\err.py", line 4, in
ib.connect('127.0.0.1', 7497, clientId=1, readonly=True)
File "C:\Users\Yar\PycharmProjects\positionkeeping2\venv\lib\site-packages\ib_insync\ib.py", line 279, in connect
return self._run(self.connectAsync(
File "C:\Users\Yar\PycharmProjects\positionkeeping2\venv\lib\site-packages\ib_insync\ib.py", line 318, in _run
return util.run(*awaitables, timeout=self.RequestTimeout)
File "C:\Users\Yar\PycharmProjects\positionkeeping2\venv\lib\site-packages\ib_insync\util.py", line 341, in run
result = loop.run_until_complete(task)
File "C:\Users\Yar\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 641, in run_until_complete
return future.result()
File "C:\Users\Yar\PycharmProjects\positionkeeping2\venv\lib\site-packages\ib_insync\ib.py", line 1782, in connectAsync
await asyncio.wait_for(self.reqExecutionsAsync(), timeout)
File "C:\Users\Yar\AppData\Local\Programs\Python\Python310\lib\asyncio\tasks.py", line 460, in wait_for
raise exceptions.TimeoutError() from exc
asyncio.exceptions.TimeoutError
已尝试以下操作但均无效:
- 重装TWS API
- 重启电脑
- 确认TWS API设置正确(端口7497,已启用ActiveX和Socket Clients)
此外,使用ibapi的代码可正常连接TWS,代码如下:
from ibapi.client import * from ibapi.wrapper import * class TestApp(EClient, EWrapper): def __init__(self): EClient.__init__(self, self) self.instrument = None self.bid_price = None self.ask_price = None def nextValidId(self, orderId: int): self.reqMarketDataType(1) self.reqMktData(orderId, self.instrument, "", True, 0, []) def tickPrice(self, reqId, tickType, price, attrib): if tickType == 1: # Bid Price self.bid_price = price elif tickType == 2: # Ask Price self.ask_price = price if self.bid_price is not None and self.ask_price is not None: print(f"{self.bid_price} / {self.ask_price}") print(f'ReqId: {reqId}') self.cancelMktData(reqId) self.disconnect() def mainProc (): instrument_data = {"symbol": "NG", "secType": "FUT", "exchange": "NYMEX", "currency": "USD", "lastTradeDateOrContractMonth": 202306} app = TestApp() app.connect("127.0.0.1", 7497, 1) contract = Contract() contract.symbol = instrument_data["symbol"] contract.secType = instrument_data["secType"] contract.exchange = instrument_data["exchange"] contract.currency = instrument_data["currency"] contract.lastTradeDateOrContractMonth = instrument_data["lastTradeDateOrContractMonth"] app.instrument = contract app.run() app.disconnect() mainProc()
内容的提问来源于stack exchange,提问作者user21889349

