def to_tick(self): """ Generate TickData object from DbTickData. """ tick = TickData( symbol=self.symbol, exchange=Exchange(self.exchange), datetime=self.datetime, name=self.name, volume=self.volume, last_price=self.last_price, last_volume=self.last_volume, limit_up=self.limit_up, limit_down=self.limit_down, open_price=self.open_price, high_price=self.high_price, low_price=self.low_price, pre_close=self.pre_close, bid_price_1=self.bid_price_1, ask_price_1=self.ask_price_1, bid_volume_1=self.bid_volume_1, ask_volume_1=self.ask_volume_1, gateway_name="DB", ) if self.bid_price_2: tick.bid_price_2 = self.bid_price_2 tick.bid_price_3 = self.bid_price_3 tick.bid_price_4 = self.bid_price_4 tick.bid_price_5 = self.bid_price_5 tick.ask_price_2 = self.ask_price_2 tick.ask_price_3 = self.ask_price_3 tick.ask_price_4 = self.ask_price_4 tick.ask_price_5 = self.ask_price_5 tick.bid_volume_2 = self.bid_volume_2 tick.bid_volume_3 = self.bid_volume_3 tick.bid_volume_4 = self.bid_volume_4 tick.bid_volume_5 = self.bid_volume_5 tick.ask_volume_2 = self.ask_volume_2 tick.ask_volume_3 = self.ask_volume_3 tick.ask_volume_4 = self.ask_volume_4 tick.ask_volume_5 = self.ask_volume_5 return tick
def on_data_update(self, data): """""" channel_id = data[0] channel, symbol = self.channelDict[channel_id] symbol = str(symbol.replace("t", "")) # Get the Tick object if symbol in self.tickDict: tick = self.tickDict[symbol] else: tick = TickData( symbol=symbol, exchange=Exchange.BITFINEX, name=symbol, datetime=datetime.now(), gateway_name=self.gateway_name, ) self.tickDict[symbol] = tick l_data1 = data[1] # Update general quote if channel == "ticker": tick.volume = float(l_data1[-3]) tick.high_price = float(l_data1[-2]) tick.low_price = float(l_data1[-1]) tick.last_price = float(l_data1[-4]) tick.open_price = float(tick.last_price - l_data1[4]) # Update deep quote elif channel == "book": bid = self.bidDict.setdefault(symbol, {}) ask = self.askDict.setdefault(symbol, {}) if len(l_data1) > 3: for price, count, amount in l_data1: price = float(price) count = int(count) amount = float(amount) if amount > 0: bid[price] = amount else: ask[price] = -amount else: price, count, amount = l_data1 price = float(price) count = int(count) amount = float(amount) if not count: if price in bid: del bid[price] elif price in ask: del ask[price] else: if amount > 0: bid[price] = amount else: ask[price] = -amount try: # BID bid_keys = bid.keys() bidPriceList = sorted(bid_keys, reverse=True) tick.bid_price_1 = bidPriceList[0] tick.bid_price_2 = bidPriceList[1] tick.bid_price_3 = bidPriceList[2] tick.bid_price_4 = bidPriceList[3] tick.bid_price_5 = bidPriceList[4] tick.bid_volume_1 = bid[tick.bid_price_1] tick.bid_volume_2 = bid[tick.bid_price_2] tick.bid_volume_3 = bid[tick.bid_price_3] tick.bid_volume_4 = bid[tick.bid_price_4] tick.bid_volume_5 = bid[tick.bid_price_5] # ASK ask_keys = ask.keys() askPriceList = sorted(ask_keys, reverse=True) tick.ask_price_1 = askPriceList[0] tick.ask_price_2 = askPriceList[1] tick.ask_price_3 = askPriceList[2] tick.ask_price_4 = askPriceList[3] tick.ask_price_5 = askPriceList[4] tick.ask_volume_1 = ask[tick.ask_price_1] tick.ask_volume_2 = ask[tick.ask_price_2] tick.ask_volume_3 = ask[tick.ask_price_3] tick.ask_volume_4 = ask[tick.ask_price_4] tick.ask_volume_5 = ask[tick.ask_price_5] except IndexError: return dt = datetime.now() tick.date = dt.strftime("%Y%m%d") tick.time = dt.strftime("%H:%M:%S.%f") tick.datetime = dt self.gateway.on_tick(copy(tick))