Example #1
0
 def tickString(self, reqId, tickType, value):
     ticker = self.reqId2Ticker.get(reqId)
     if not ticker:
         return
     try:
         if tickType == 48:
             # RTVolume string format:
             # price;size;ms since epoch;total volume;VWAP;single trade
             # example:
             # 701.28;1;1348075471534;67854;701.46918464;true
             price, size, _, rtVolume, vwap, _ = value.split(';')
             if rtVolume:
                 ticker.rtVolume = int(rtVolume)
             if vwap:
                 ticker.vwap = float(vwap)
             if price == '':
                 return
             price = float(price)
             size = float(size)
             if price and size:
                 if ticker.prevLast != ticker.last:
                     ticker.prevLast = ticker.last
                     ticker.last = price
                 if ticker.prevLastSize != ticker.lastSize:
                     ticker.prevLastSize = ticker.lastSize
                     ticker.lastSize = size
                 tick = TickData(self.lastTime, tickType, price, size)
                 ticker.ticks.append(tick)
                 self.pendingTickers.add(ticker)
         elif tickType == 59:
             # https://interactivebrokers.github.io/tws-api/tick_types.html#ib_dividends
             if value == ",,,":
                 # no dividend
                 ticker.dividends = Dividends(0, 0, None, 0)
             else:
                 # example value: '0.83,0.92,20130219,0.23'
                 past12, next12, date, amount = value.split(',')
                 ticker.dividends = Dividends(float(past12), float(next12),
                                              util.parseIBDatetime(date),
                                              float(amount))
     except ValueError:
         self._logger.error(f'tickString with tickType {tickType}: '
                            f'malformed value: {value!r}')
Example #2
0
 def tickString(self, reqId, tickType, value):
     ticker = self.reqId2Ticker.get(reqId)
     if not ticker:
         return
     try:
         if tickType == 47:
             # https://interactivebrokers.github.io/tws-api/fundamental_ratios_tags.html
             d = dict(t.split('=') for t in value.split(';') if t)
             for k, v in d.items():
                 with suppress(ValueError):
                     if v == '-99999.99':
                         v = 'nan'
                     d[k] = float(v)
                     d[k] = int(v)
             ticker.fundamentalRatios = FundamentalRatios(**d)
         elif tickType == 48:
             # RTVolume string format:
             # price;size;ms since epoch;total volume;VWAP;single trade
             # example:
             # 701.28;1;1348075471534;67854;701.46918464;true
             price, size, _, rtVolume, vwap, _ = value.split(';')
             if rtVolume:
                 ticker.rtVolume = int(rtVolume)
             if vwap:
                 ticker.vwap = float(vwap)
             if price == '':
                 return
             price = float(price)
             size = float(size)
             if price and size:
                 if ticker.prevLast != ticker.last:
                     ticker.prevLast = ticker.last
                     ticker.last = price
                 if ticker.prevLastSize != ticker.lastSize:
                     ticker.prevLastSize = ticker.lastSize
                     ticker.lastSize = size
                 tick = TickData(self.lastTime, tickType, price, size)
                 ticker.ticks.append(tick)
                 self.pendingTickers.add(ticker)
         elif tickType == 59:
             # Dividend tick:
             # https://interactivebrokers.github.io/tws-api/tick_types.html#ib_dividends
             # example value: '0.83,0.92,20130219,0.23'
             past12, next12, nextDate, nextAmount = value.split(',')
             ticker.dividends = Dividends(
                 float(past12) if past12 else None,
                 float(next12) if next12 else None,
                 util.parseIBDatetime(nextDate) if nextDate else None,
                 float(nextAmount) if nextAmount else None)
     except ValueError:
         self._logger.error(
             f'tickString with tickType {tickType}: '
             f'malformed value: {value!r}')