diff --git a/piker/brokers/ib.py b/piker/brokers/ib.py index 3ed40876..aa07f9ef 100644 --- a/piker/brokers/ib.py +++ b/piker/brokers/ib.py @@ -440,11 +440,19 @@ class Client: # async to be consistent for the client proxy, and cuz why not. async def submit_limit( self, - oid: str, # XXX: see return value + # ignored since ib doesn't support defining your + # own order id + oid: str, symbol: str, price: float, action: str, size: int, + + # XXX: by default 0 tells ``ib_insync`` methods that there is no + # existing order so ask the client to create a new one (which + # it seems to do by allocating an int counter - collision + # prone..) + brid: int = None, ) -> int: """Place an order and return integer request id provided by client. @@ -460,7 +468,7 @@ class Client: trade = self.ib.placeOrder( contract, Order( - # orderId=oid, # stupid api devs.. + orderId=brid or 0, # stupid api devs.. action=action.upper(), # BUY/SELL orderType='LMT', lmtPrice=price, @@ -1226,6 +1234,9 @@ async def stream_trades( # it's a trade event generated by TWS usage. log.warning(f"TWS triggered trade:\n{pformat(msg)}") - msg['reqid'] = 'tws-' + msg['reqid'] + msg['reqid'] = 'tws-' + str(-1 * msg['reqid']) + + yield {'remote_trades': (event_name, msg)} + continue yield {'local_trades': (event_name, msg)}