async def sub_callback(self, data): if data["err-code"] != 0: e = Error("subscribe {} failed!".format(data["topic"])) logger.error(e, caller=self) SingleTask.run(self._init_success_callback, False, e) return if data["topic"] == self._order_channel: self._subscribe_order_ok = True elif data["topic"] == self._position_channel: self._subscribe_position_ok = True elif data["topic"] == self._asset_channel: self._subscribe_asset_ok = True if self._subscribe_order_ok and self._subscribe_position_ok \ and self._subscribe_asset_ok: success, error = await self._rest_api.get_open_orders(self._symbol) if error: e = Error("get open orders failed!") SingleTask.run(self._init_success_callback, False, e) elif "data" in success and "orders" in success["data"]: for order_info in success["data"]["orders"]: order_info["ts"] = order_info["created_at"] self._update_order(order_info) SingleTask.run(self._init_success_callback, True, None) else: logger.warn("get open orders:", success, caller=self) e = Error("Get Open Orders Unknown error") SingleTask.run(self._init_success_callback, False, e)
async def auth_callback(self, data): if data["err-code"] != 0: e = Error( "Websocket connection authorized failed: {}".format(data)) logger.error(e, caller=self) SingleTask.run(self._init_success_callback, False, e) return self._subscribe_order_ok = False self._subscribe_position_ok = False self._subscribe_asset_ok = False # subscribe order data = { "op": "sub", "cid": tools.get_uuid1(), "topic": self._order_channel } await self.ws.send_json(data) # subscribe position data = { "op": "sub", "cid": tools.get_uuid1(), "topic": self._position_channel } await self.ws.send_json(data) # subscribe asset data = { "op": "sub", "cid": tools.get_uuid1(), "topic": self._asset_channel } await self.ws.send_json(data)
def __init__(self, strategy=None, platform=None, symbol=None, host=None, wss=None, account=None, access_key=None, secret_key=None, asset_update_callback=None, order_update_callback=None, position_update_callback=None, init_success_callback=None, **kwargs): """initialize trade object.""" kwargs["strategy"] = strategy kwargs["platform"] = platform kwargs["symbol"] = symbol kwargs["host"] = host kwargs["wss"] = wss kwargs["account"] = account kwargs["access_key"] = access_key kwargs["secret_key"] = secret_key kwargs["asset_update_callback"] = asset_update_callback kwargs["order_update_callback"] = self._on_order_update_callback kwargs["position_update_callback"] = self._on_position_update_callback kwargs["init_success_callback"] = self._on_init_success_callback self._raw_params = copy.copy(kwargs) self._order_update_callback = order_update_callback self._position_update_callback = position_update_callback self._init_success_callback = init_success_callback if platform == const.HUOBI_SWAP: from huobi.platforms.huobi_swap_trade import HuobiSwapTrade as T elif platform == const.HUOBI_FUTURE: from huobi.platforms.huobi_future_trade import HuobiFutureTrade as T elif platform == const.HUOBI_OPTION: from huobi.platforms.huobi_option_trade import HuobiOptionTrade as T elif platform == const.HUOBI_USDT_SWAP: from huobi.platforms.huobi_usdt_swap_trade import HuobiUsdtSwapTrade as T elif platform == const.HUOBI_USDT_SWAP_CROSS: from huobi.platforms.huobi_usdt_swap_cross_trade import HuobiUsdtSwapCrossTrade as T else: logger.error("platform error:", platform, caller=self) e = Error("platform error") SingleTask.run(self._init_success_callback, False, e) return kwargs.pop("platform") self._t = T(**kwargs)
def __init__(self, **kwargs): """Initialize.""" e = None if not kwargs.get("account"): e = Error("param account miss") if not kwargs.get("strategy"): e = Error("param strategy miss") if not kwargs.get("symbol"): e = Error("param symbol miss") if not kwargs.get("contract_type"): e = Error("param contract_type miss") if not kwargs.get("host"): kwargs["host"] = "https://api.hbdm.com" if not kwargs.get("wss"): kwargs["wss"] = "wss://api.hbdm.com" if not kwargs.get("access_key"): e = Error("param access_key miss") if not kwargs.get("secret_key"): e = Error("param secret_key miss") if e: logger.error(e, caller=self) if kwargs.get("init_success_callback"): SingleTask.run(kwargs["init_success_callback"], False, e) return self._account = kwargs["account"] self._strategy = kwargs["strategy"] self._platform = HUOBI_USDT_SWAP_CROSS self._symbol = kwargs["symbol"] self._contract_type = kwargs["contract_type"] self._host = kwargs["host"] self._wss = kwargs["wss"] self._access_key = kwargs["access_key"] self._secret_key = kwargs["secret_key"] self._order_update_callback = kwargs.get("order_update_callback") self._position_update_callback = kwargs.get("position_update_callback") self._asset_update_callback = kwargs.get("asset_update_callback") self._init_success_callback = kwargs.get("init_success_callback") url = self._wss + "/linear-swap-notification" super(HuobiUsdtSwapCrossTrade, self).__init__(url, send_hb_interval=5) self._assets = {} # Asset detail, {"BTC": {"free": "1.1", "locked": "2.2", "total": "3.3"}, ... }. self._orders = {} # Order objects, {"order_id": order, ...}. self._position = Position(self._platform, self._account, self._strategy, self._symbol + '/' + self._contract_type) self._order_channel = "orders_cross.{symbol}".format(symbol=self._symbol) self._position_channel = "positions_cross.{symbol}".format(symbol=self._symbol) self._asset_channel = "accounts_cross.{symbol}".format(symbol="USDT") self._subscribe_order_ok = False self._subscribe_position_ok = False self._subscribe_asset_ok = False self._rest_api = HuobiUsdtSwapCrossRestAPI(self._access_key, self._secret_key, self._host) self.initialize()
def __init__(self, **kwargs): """Initialize.""" e = None if not kwargs.get("account"): e = Error("param account miss") if not kwargs.get("strategy"): e = Error("param strategy miss") if not kwargs.get("symbol"): e = Error("param symbol miss") if not kwargs.get("host"): kwargs["host"] = "https://api.hbdm.com" if not kwargs.get("wss"): kwargs["wss"] = "wss://api.hbdm.com" if not kwargs.get("access_key"): e = Error("param access_key miss") if not kwargs.get("secret_key"): e = Error("param secret_key miss") if e: logger.error(e, caller=self) if kwargs.get("init_success_callback"): SingleTask.run(kwargs["init_success_callback"], False, e) return self._account = kwargs["account"] self._strategy = kwargs["strategy"] self._platform = HUOBI_OPTION self._symbol = kwargs["symbol"] self._host = kwargs["host"] self._wss = kwargs["wss"] self._access_key = kwargs["access_key"] self._secret_key = kwargs["secret_key"] self._contract_code = kwargs.get("contract_code") self._order_update_callback = kwargs.get("order_update_callback") self._position_update_callback = kwargs.get("position_update_callback") self._asset_update_callback = kwargs.get("asset_update_callback") self._init_success_callback = kwargs.get("init_success_callback") self._lock = asyncio.Lock() url = self._wss + "/option-notification" super(HuobiOptionTrade, self).__init__(url, send_hb_interval=5) # self._raw_symbol = self._symbol.split("-")[0] # self._trade_partition = self._symbol.split("-")[1] self._assets = {} # Asset detail, {"BTC": {"free": "1.1", "locked": "2.2", "total": "3.3"}, ... }. self._orders = {} # Order objects, {"order_id": order, ...}. self._position = Position(self._platform, self._account, self._strategy, self._symbol) self._order_channel = "orders.{symbol}-USDT".format(symbol=self._symbol) self._position_channel = "positions.{symbol}-USDT".format(symbol=self._symbol) self._asset_channels = ["accounts.{symbol}-USDT".format(symbol=self._symbol), "accounts.USDT-USDT".format(symbol=self._symbol)] self._subscribe_order_ok = False self._subscribe_position_ok = False self._subscribe_asset_ok = False self._rest_api = HuobiOptionRestAPI(self._access_key, self._secret_key, self._host) self.initialize()