def get_live_interval_bars(ticker: str, bar_len: int, seconds: int): """Get real-time interval bars""" bar_conn = iq.BarConn(name='pyiqfeed-Example-interval-bars') bar_listener = iq.VerboseBarListener("Bar Listener") bar_conn.add_listener(bar_listener) with iq.ConnConnector([bar_conn]) as connector: bar_conn.watch(symbol=ticker, interval_len=bar_len, interval_type='s', update=1, lookback_bars=10) time.sleep(seconds)
def _start_listening(self): conn = iq.BarConn(name="{} - live, {} minutes interval".format( self.ticker, self.bars_interval)) conn.add_listener(self) with iq.ConnConnector([conn]) as connector: conn.watch(symbol=self.ticker, interval_len=self.bars_interval, interval_type=Instrument.INTERVAL_TYPE, update=self.bars_interval, lookback_bars=self.bars_to_load) while True: time.sleep(5)
def run_forever(self, timeframe): """Start listening to IQFeed bars for the specified time frame.""" bar_conn = iq.BarConn(name="IQFeed Bar Conn %s" % bt.TimeFrame.getname(timeframe)) bar_listener = IQFeedBarListener( "IQFeed Bar listener %s" % bt.TimeFrame.getname(timeframe), self.queues[timeframe]) bar_conn.add_listener(bar_listener) watched = [] with iq.ConnConnector([bar_conn]) as connector: while not self.stopped: for data in self.datas: if data.p.timeframe == timeframe and id( data) not in watched: interval_type = 't' if data.p.timeframe == bt.TimeFrame.Ticks else 's' interval_len = { bt.TimeFrame.Ticks: 1, bt.TimeFrame.Seconds: 1, bt.TimeFrame.Minutes: 60 }.get(data.p.timeframe) bar_conn.watch(symbol=data.p.dataname, interval_len=interval_len * data.p.compression, interval_type=interval_type, bgn_bars=None, lookback_days=1, lookback_bars=None, update=0) watched.append(id(data)) time.sleep(0.1) for data in self.datas: if data.p.timeframe == timeframe: quote_conn.unwatch(data.p.dataname) bar_conn.remove_listener(bar_listener)
'USDJPY.FXCM', ] def callback(bar_data: np.array): print(bar_data['datetime'][0]) full_name = bar_data['symbol'][0] label_name = full_name.split('.')[0] + '_PRICE' text_field = getattr(ui, label_name) text_field.setText(str(bar_data['close_p'][0])) if __name__ == "__main__": # init listener bar_conn = iq.BarConn(name='test live interval bars') bar_listener = QuoteListener('customized bar listener', callback) bar_conn.add_listener(bar_listener) with iq.ConnConnector([bar_conn]) as conn: for ticker in tickers: print('watching {}'.format(ticker)) bar_conn.watch(symbol=ticker, interval_len=1 * 60, interval_type='s', update=1, lookback_bars=205) bar_conn.watch(symbol=ticker, interval_len=5 * 60, interval_type='s', update=1, lookback_bars=205)