def open_interest_is_valid(ticker): ticker = self.ib.reqMktData(ticker.contract, genericTickList="101") def open_interest_is_not_ready(): if right.startswith("P"): return util.isNan(ticker.putOpenInterest) if right.startswith("C"): return util.isNan(ticker.callOpenInterest) try: while_n_times( open_interest_is_not_ready, lambda: self.ib.waitOnUpdate(timeout=5), 25, ) except: return False self.ib.cancelMktData(ticker.contract) # The open interest value is never present when using historical # data, so just ignore it when the value is None if right.startswith("P"): return (ticker.putOpenInterest >= self.config["target"]["minimum_open_interest"]) if right.startswith("C"): return (ticker.callOpenInterest >= self.config["target"]["minimum_open_interest"])
def wait_for_market_price(self, ticker): try: while_n_times( lambda: util.isNan(ticker.marketPrice()), lambda: self.ib.waitOnUpdate(timeout=5), 25, ) except: return False return True
def wait_for_trade_submitted(self, trade): while_n_times( lambda: trade.orderStatus.status not in [ "Submitted", "Filled", "ApiCancelled", "Cancelled", ], lambda: self.ib.waitOnUpdate(timeout=5), 25, ) return trade
def wait_for_market_price(self, ticker): while_n_times( lambda: util.isNan(ticker.marketPrice()), lambda: self.ib.waitOnUpdate(timeout=2), 10, )
def wait_for_midpoint_price(self, ticker): while_n_times( lambda: util.isNan(ticker.midpoint()), lambda: self.ib.waitOnUpdate(timeout=3), 10, )