コード例 #1
0
 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)
コード例 #2
0
    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)
コード例 #3
0
ファイル: trade.py プロジェクト: pengfilee/ALPHA
    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 alpha.platforms.huobi_swap_trade import HuobiSwapTrade as T
        elif platform == const.HUOBI_FUTURE:
            from alpha.platforms.huobi_future_trade import HuobiFutureTrade as T
        elif platform == const.HUOBI_OPTION:
            from alpha.platforms.huobi_option_trade import HuobiOptionTrade as T
        elif platform == const.HUOBI_USDT_SWAP:
            from alpha.platforms.huobi_usdt_swap_trade import HuobiUsdtSwapTrade as T
        elif platform == const.HUOBI_USDT_SWAP_CROSS:
            from alpha.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)
コード例 #4
0
    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_FUTURE
        self._symbol = kwargs["symbol"].split('_')[0]
        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._asset_update_callback = kwargs.get("asset_update_callback")
        self._order_update_callback = kwargs.get("order_update_callback")
        self._position_update_callback = kwargs.get("position_update_callback")
        self._init_success_callback = kwargs.get("init_success_callback")

        url = self._wss + "/notification"
        super(HuobiFutureTrade, 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.{symbol}".format(symbol=self._symbol.lower())
        self._position_channel = "positions.{symbol}".format(symbol=self._symbol.lower())
        self._asset_channel = "accounts.{symbol}".format(symbol=self._symbol.lower())

        self._subscribe_order_ok = False
        self._subscribe_position_ok = False
        self._subscribe_asset_ok = False

        self._rest_api = HuobiFutureRestAPI(self._host, self._access_key, self._secret_key)

        self.initialize()
コード例 #5
0
ファイル: trade.py プロジェクト: drupal6/hbdm-client
    def __init__(self, strategy=None, platform=None, symbol=None, contract_type=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, rest_api=None, **kwargs):
        """initialize trade object."""
        kwargs["strategy"] = strategy
        kwargs["platform"] = platform
        kwargs["symbol"] = symbol
        kwargs["contract_type"] = contract_type
        kwargs["host"] = host
        kwargs["wss"] = wss
        kwargs["rest_api"] = rest_api
        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
        self._rest_api = rest_api

        if platform == const.HUOBI_SWAP:
            from alpha.platforms.swap.huobi_swap_trade import HuobiSwapTrade as T
        elif platform == const.HUOBI_DELIVERY:
            from alpha.platforms.delivery.huobi_delivery_trade import HuobiDeliveryTrade 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)