For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/

Custom live data feed not calling _load



  • Hi. First off, thanks so much for writing this library.

    I've been working on implementing a live feed for use with Intrinio's IEX socket data. I'm trying to get just a hacky implementation up using Intrinio's python client before I start really integrating the 2 together.

    class MetaIntrinioData(DataBase.__class__):
        def __init__(cls, name, bases, dct):
            '''Class has already been created ... register'''
            # Initialize the class
            super(MetaIntrinioData, cls).__init__(name, bases, dct)
    
    class IntrinioData(with_metaclass(MetaIntrinioData, DataBase)):
            def __init__(self):
        options = {
            'username': 'afc02b9ad3eb215c40fe1d2b0117fda0',
            'password': '3fc9c2dc9db2288887a68c0a8d89965c',
            'provider': 'iex',
            'on_quote': self.on_quote
        }
        self.client = IntrinioRealtimeClient(options)
        self.queue = Queue(25000)
    
        super(IntrinioFeed, self).__init__()
    
        def on_quote(self, quote, backlog):
        # print("QUOTE: ", quote, "BACKLOG LENGTH: ", backlog)
        self.queue.put(quote)
    
        def islive(self):
        '''Returns ``True`` to notify ``Cerebro`` that preloading and runonce
        should be deactivated'''
        return True
    
        def start(self):
        #listen to stocks (eventually set by user)
        self.client.join(['AAPL', 'GE', 'MSFT'])
        self.client.connect()
        self.client.keep_alive()
    
        super(IntrinioFeed, self).start()
    
        def haslivedata(self):
            return bool(self.backlog)
    
        def stop(self):
            self.client.disconnect()
    
        def _load(self):
            print("yo")
            while True:
                if self.islive() == True:
                    try:
                        print(self.client.quotes.get())
                        #get message, put in queuee
                    except queue.Empty:
                        if True:
                            return None
    
                    ret = self._load_tick(self.msg)
                    if ret:
                        return True
    
    
        def _load_tick(self, msg):
            dtobj = datetime.utcfromtimestamp(msg['timestamp'])
            dt = date2num(dtobj)
            if dt <= self.lines.datetime[-1]:
                return False  # time already seen
    
            # Common fields
            self.lines.datetime[0] = dt
            self.lines.volume[0] = msg['volume']
    
            # Put the prices into the bar
            tick = msg['price']
            self.lines.open[0] = tick
            self.lines.high[0] = tick
            self.lines.low[0] = tick
            self.lines.close[0] = tick
    
            return True
    

    This code is still quite hacky, but when I try to test using a dummy strategy, nothing is called. The client connects to the server, and starts filling the queue, but _load and start is not called at all. What am I missing/doing incorrectly?


  • administrators

    As you also mention, the code seems too hacky to make any real assertion.