def _on_message(self, ws, message): # log.debug(f"on_msg:{message}") message = json.loads(message) message_type = message['type'] if message_type in {'subscribed', 'unsubscribed'}: return elif message_type == 'info': if message['code'] == 20001: return self.reconnect() elif message_type == 'error': raise Exception(message) if message =="pong": log.debug(message) pass channel = message.get('channel',None) if channel == 'orderbook': self.orderbook_message(message) elif channel == 'trades': self.trades_message(message) elif channel == 'ticker': self.ticker_message(message) elif channel == 'fills': self.fills_message(message) elif channel == 'orders': self.orders_message(message)
def subscribe(self, channels): for k in channels.keys(): c=self.chanels.get(k,"") for symbol in self.symbols: log.debug(f"subscrpbe:{c}:{symbol}") self.send_json({'op': 'subscribe', "channel":c, "market": symbol}) self.subscribes[k] = channels[k]
def _ping(self,ws): timeout = 30 count = 0 while self.ws: if count < timeout: time.sleep(1) count = count + 1 else: log.debug("ping") self.send_json({'op':'ping'}) count=0
def login(self) -> None: if self._api_key: ts = int(time.time() * 1000) self.send_json({'op': 'login', 'args': { 'key': self._api_key, 'sign': hmac.new( self._api_secret.encode(), f'{ts}websocket_login'.encode(), 'sha256').hexdigest(), 'time': ts, }}) self._logged_in = True log.debug("login")
def savedb(self): if not self.taker_price == 0 and not self.maker_price == 0: try: db.insert_one( "spreed", { "symbol": "BTCUSDT", "timestamp": get_cur_timestamp_ms(), "makerprice": self.maker_price, "takerprice": self.taker_price }) except Exception as e: log.debug(e)
def connect(self): credentials = pika.PlainCredentials(self._username, self._password) connection = pika.BlockingConnection( pika.ConnectionParameters(host=self._host, port=self._port, credentials=credentials, heartbeat=0)) channel = connection.channel() self._connect = connection exchanges = [ "Trade", "Ticker", "OrderBook", "Kline.15min", "Asset", "Logger" ] for name in exchanges: channel.exchange_declare(name, "topic") self._channel = channel log.debug("create default exchanges success!")
def callback(self, event): """ {'e': 'forceOrder', 'E': 1594107015086, 'o': {'s': 'BTCUSDT', 'S': 'SELL', 'o': 'LIMIT', 'f': 'IOC', 'q': '1.300', 'p': '9206.39', 'ap': '9242.01', 'X': 'FILLED', 'l': '1.084', 'z': '1.300', 'T': 1594107015081}} :param event: :return: """ e = event.data try: data = e["o"] db.insert_one("forceorder", data) except Exception as e: log.debug(e)