backtrader2 / backtrader

Python Backtesting library for trading strategies
https://www.backtrader.com
GNU General Public License v3.0
221 stars 52 forks source link

IB : Exception in message dispatch. Handler 'commissionReport' for 'commissionReport' <...> in push_commissionreport ex = self.executions.pop(cr.m_execId) #53

Open FGU1 opened 3 years ago

FGU1 commented 3 years ago

Not really a technical bug on Backtrader side, IMO more a design problem on IB side, but I create this issue for information. When trading with BT via IB, one can get this kind of message :

08-Oct-20 17:47:24 ERROR Exception in message dispatch. Handler 'commissionReport' for 'commissionReport' Traceback (most recent call last): File "x/backtrader-J2SaRgr0/lib/python3.7/site-packages/ib/opt/dispatcher.py", line 44, in __call__ results.append(listener(message)) File "x/backtrader/backtrader/backtrader/stores/ibstore.py", line 1323, in commissionReport self.broker.push_commissionreport(msg.commissionReport) File x/labs/backtrader/backtrader/backtrader/brokers/ibbroker.py", line 482, in push_commissionreport ex = self.executions.pop(cr.m_execId) KeyError: '0000e215.5f7e7752.01.01

This exception is raised when backtrader is running with a given ClientID, and that an order is placed manually or with another API connection and a different ClientID. The reason is that BT cannot filter by ClientID when receiving commissionReport, as IB do not send a ClientID in the commissionReport message.

More details on this :

So a running strategy will receive commissionReport messages for all order executed on TWS : its own orders, orders placed manually and from another clientId, but not the openorder and execDetails messages. There are 2 exception for this :