def test_request_realtime_bars(ib: IB): contract = Forex('EURUSD') bars = ib.reqRealTimeBars(contract, 5, 'MIDPOINT', False) bars.updateEvent += on_bar_update ib.sleep(100000) # 开盘到收盘时间 ib.cancelRealTimeBars(bars) return bars
def _cancel_job( self, ib_client: ib_insync.IB, streaming_id: StreamingID) -> Optional[ib_insync.RealTimeBarList]: """ Cancels a streaming job, removing its metadata from Firestore (so it will no longer be resumed) and cancelling streaming market data from IB. Returns the final `RealTimeBarList` associated with this ID, if it could be found. """ logger.debug( f"{len(self._real_time_bars)} _real_time_bars before cancelling: {self._real_time_bars.keys()}" ) bar_list = self._real_time_bars.pop(streaming_id, None) if bar_list is not None: ib_client.cancelRealTimeBars(bar_list) self._delete_job_from_firestore(streaming_id) return bar_list