def subscribe(self, req: SubscribeRequest): """ Subscribe to tick data upate. """ self.subscribed[req.vt_symbol] = req tick = TickData( symbol=req.symbol, exchange=req.exchange, name=req.symbol, datetime=datetime.now(), gateway_name=self.gateway_name, ) self.ticks[req.symbol] = tick channel_ticker = f"futures/ticker:{req.symbol}" channel_depth = f"futures/depth5:{req.symbol}" self.callbacks[channel_ticker] = self.on_ticker self.callbacks[channel_depth] = self.on_depth req = { "op": "subscribe", "args": [channel_ticker, channel_depth] } self.send_packet(req)
def subscribe(self, req: SubscribeRequest): """""" if req.symbol not in symbol_name_map: self.gateway.write_log(f"找不到该合约代码{req.symbol}") return # Create tick buf data tick = TickData( symbol=req.symbol, name=symbol_name_map.get(req.symbol, ""), exchange=Exchange.BINANCE, datetime=datetime.now(CHINA_TZ), gateway_name=self.gateway_name, ) self.ticks[req.symbol] = tick # Close previous connection if self._active: self.stop() self.join() # Create new connection channels = [] for ws_symbol in self.ticks.keys(): channels.append(ws_symbol + "@ticker") channels.append(ws_symbol + "@depth5") url = WEBSOCKET_DATA_HOST + "/".join(channels) self.init(url, self.proxy_host, self.proxy_port) self.start()
def subscribe(self, req: SubscribeRequest): """ Subscribe to tick data upate. """ tick = TickData( symbol=req.symbol, exchange=req.exchange, name=req.symbol, datetime=datetime.now(UTC_TZ), gateway_name=self.gateway_name, ) self.ticks[req.symbol] = tick tick_req = self.generate_req( channel="futures.tickers", event="subscribe", pay_load=[req.symbol] ) self.send_packet(tick_req) depth_req = self.generate_req( channel="futures.order_book", event="subscribe", pay_load=[req.symbol, "5", "0"] ) self.send_packet(depth_req)
def subscribe(self, req: SubscribeRequest) -> None: """""" if req.symbol not in symbol_name_map: self.gateway.write_log(f"找不到该合约代码{req.symbol}") return # Create tick buf data tick = TickData( symbol=req.symbol, name=symbol_name_map.get(req.symbol, ""), exchange=Exchange.BINANCE, datetime=datetime.now(CHINA_TZ), gateway_name=self.gateway_name, ) self.ticks[req.symbol.lower()] = tick # Create bar buf data bar = BarData( symbol=req.symbol, exchange=Exchange.BINANCE, datetime=datetime.now(CHINA_TZ), gateway_name=self.gateway_name, interval=Interval.MINUTE ) self.bars[req.symbol.lower()] = bar self.last[req.symbol.lower()] = {} self.trades[req.symbol.lower()] = [] # Close previous connection if self._active: self.stop() self.join() # Create new connection channels = [] for ws_symbol in self.ticks.keys(): # channels.append(ws_symbol + "@ticker") channels.append(ws_symbol + "@depth5@100ms") channels.append(ws_symbol + "@kline_1m") channels.append(ws_symbol + "@aggTrade") if self.server == "REAL": url = F_WEBSOCKET_DATA_HOST + "/".join(channels) if not self.usdt_base: url = D_WEBSOCKET_DATA_HOST + "/".join(channels) else: url = F_TESTNET_WEBSOCKET_DATA_HOST + "/".join(channels) if not self.usdt_base: url = D_TESTNET_WEBSOCKET_DATA_HOST + "/".join(channels) self.init(url, self.proxy_host, self.proxy_port) self.start()
def to_tick(self): """""" tick = TickData(symbol=self.name, exchange=Exchange.LOCAL, datetime=self.datetime, name=self.name, last_price=(self.bid_price + self.ask_price) / 2, bid_price_1=self.bid_price, ask_price_1=self.ask_price, bid_volume_1=self.bid_volume, ask_volume_1=self.ask_volume, gateway_name="SPREAD") return tick
def subscribe(self, req: SubscribeRequest) -> None: """""" buf = [i for i in req.symbol if not i.isdigit()] symbol = "".join(buf) ws_symbol = f"{symbol}" # Create tick data buffer tick = TickData( symbol=req.symbol, name=req.symbol, exchange=Exchange.HUOBI, datetime=datetime.now(CHINA_TZ), gateway_name=self.gateway_name, ) self.ticks[ws_symbol] = tick self.subscribe_data(ws_symbol)
def subscribe(self, req: SubscribeRequest): """""" contract_type = symbol_type_map.get(req.symbol, "") if not contract_type: return buf = [i for i in req.symbol if not i.isdigit()] symbol = "".join(buf) ws_contract_type = CONTRACT_TYPE_MAP[contract_type] ws_symbol = f"{symbol}_{ws_contract_type}" # Create tick data buffer tick = TickData( symbol=req.symbol, name=req.symbol, exchange=Exchange.HUOBI, datetime=datetime.now(CHINA_TZ), gateway_name=self.gateway_name, ) self.ticks[ws_symbol] = tick self.subscribe_data(ws_symbol)
def subscribe(self, req: SubscribeRequest) -> None: """""" symbol = req.symbol # Create tick data buffer tick = TickData( symbol=symbol, name=symbol_name_map.get(symbol, ""), exchange=Exchange.HUOBI, datetime=datetime.now(CHINA_TZ), gateway_name=self.gateway_name, ) self.ticks[symbol] = tick # Subscribe to market depth update self.req_id += 1 req = {"sub": f"market.{symbol}.depth.step0", "id": str(self.req_id)} self.send_packet(req) # Subscribe to market detail update self.req_id += 1 req = {"sub": f"market.{symbol}.detail", "id": str(self.req_id)} self.send_packet(req)
def to_tick(self): """ Generate TickData object from DbTickData. """ tick = TickData( symbol=self.symbol, exchange=Exchange(self.exchange), datetime=self.datetime.replace(tzinfo=DB_TZ), name=self.name, volume=self.volume, open_interest=self.open_interest, 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, close_price=self.close_price, 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