From 830e622441d392e4824909cb65689e4eaad7dbe2 Mon Sep 17 00:00:00 2001 From: Charles Verge Date: Mon, 31 Mar 2025 12:55:13 -0300 Subject: [PATCH] for reqExecutions execFilter cannot be empty --- ib_async/ib.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ib_async/ib.py b/ib_async/ib.py index 6a7a519..e4cea68 100644 --- a/ib_async/ib.py +++ b/ib_async/ib.py @@ -947,7 +947,7 @@ def reqCompletedOrders(self, apiOnly: bool) -> List[Trade]: """ return self._run(self.reqCompletedOrdersAsync(apiOnly)) - def reqExecutions(self, execFilter: Optional[ExecutionFilter] = None) -> List[Fill]: + def reqExecutions(self, execFilter: ExecutionFilter) -> List[Fill]: """ It is recommended to use :meth:`.fills` or :meth:`.executions` instead. @@ -2063,7 +2063,9 @@ async def connectAsync( # the request for executions must come after all orders are in if fetchFields & StartupFetch.EXECUTIONS: try: - await asyncio.wait_for(self.reqExecutionsAsync(), timeout) + execFilter = ExecutionFilter() + execFilter.clientId = clientId + await asyncio.wait_for(self.reqExecutionsAsync(execFilter), timeout) except asyncio.TimeoutError: msg = "executions request timed out" errors.append(msg) @@ -2207,7 +2209,9 @@ def reqCompletedOrdersAsync(self, apiOnly: bool) -> Awaitable[List[Trade]]: def reqExecutionsAsync( self, execFilter: Optional[ExecutionFilter] = None ) -> Awaitable[List[Fill]]: - execFilter = execFilter or ExecutionFilter() + if execFilter is None: + execFilter = ExecutionFilter() + execFilter.clientId = self.client.clientId reqId = self.client.getReqId() future = self.wrapper.startReq(reqId) self.client.reqExecutions(reqId, execFilter)