def validate_exchange(cls, v: str, field: Field):
     """Used for client-friendly error output."""
     ret = validate_exchange(v)
     if ret is not None:
         raise ValueError(ret)
     if field.name == "maker_market_trading_pair":
         cls.__fields__[
             "maker_market"].type_ = ClientConfigEnum(  # rebuild the exchanges enum
                 value="Exchanges",  # noqa: F821
                 names={
                     e: e
                     for e in
                     AllConnectorSettings.get_connector_settings().keys()
                 },
                 type=str,
             )
     if field.name == "taker_market_trading_pair":
         cls.__fields__[
             "taker_market"].type_ = ClientConfigEnum(  # rebuild the exchanges enum
                 value="Exchanges",  # noqa: F821
                 names={
                     e: e
                     for e in
                     AllConnectorSettings.get_connector_settings().keys()
                 },
                 type=str,
             )
     return v
示例#2
0
    def balance(self, option: str = None, args: List[str] = None):
        if threading.current_thread() != threading.main_thread():
            self.ev_loop.call_soon_threadsafe(self.balance, option, args)
            return

        self.app.clear_input()
        if option is None:
            safe_ensure_future(self.show_balances())

        elif option in OPTIONS:
            config_map = global_config_map
            file_path = GLOBAL_CONFIG_PATH
            if option == "limit":
                config_var = config_map["balance_asset_limit"]
                if args is None or len(args) == 0:
                    safe_ensure_future(self.show_asset_limits())
                    return
                if len(args) != 3 or validate_exchange(
                        args[0]) is not None or validate_decimal(
                            args[2]) is not None:
                    self._notify("Error: Invalid command arguments")
                    self.notify_balance_limit_set()
                    return
                exchange = args[0]
                asset = args[1].upper()
                amount = float(args[2])
                if exchange not in config_var.value or config_var.value[
                        exchange] is None:
                    config_var.value[exchange] = {}
                if amount < 0 and asset in config_var.value[exchange].keys():
                    config_var.value[exchange].pop(asset)
                    self._notify(
                        f"Limit for {asset} on {exchange} exchange removed.")
                elif amount >= 0:
                    config_var.value[exchange][asset] = amount
                    self._notify(
                        f"Limit for {asset} on {exchange} exchange set to {amount}"
                    )
                save_to_yml(file_path, config_map)

            elif option == "paper":
                config_var = config_map["paper_trade_account_balance"]
                if args is None or len(args) == 0:
                    safe_ensure_future(self.show_paper_account_balance())
                    return
                if len(args) != 2 or validate_decimal(args[1]) is not None:
                    self._notify("Error: Invalid command arguments")
                    self.notify_balance_paper_set()
                    return
                asset = args[0].upper()
                amount = float(args[1])
                paper_balances = dict(
                    config_var.value) if config_var.value else {}
                paper_balances[asset] = amount
                config_var.value = paper_balances
                self._notify(
                    f"Paper balance for {asset} token set to {amount}")
                save_to_yml(file_path, config_map)
示例#3
0
    def test_validate_exchange_connector_does_not_exist(self):
        non_existant_exchange = "TEST_NON_EXISTANT_EXCHANGE"

        validation_error = config_validators.validate_exchange(
            non_existant_exchange)
        self.assertEqual(
            validation_error,
            f"Invalid exchange, please choose value from {AllConnectorSettings.get_exchange_names()}"
        )
示例#4
0
    def balance(
            self,  # type: HummingbotApplication
            option: str = None,
            args: List[str] = None):
        if threading.current_thread() != threading.main_thread():
            self.ev_loop.call_soon_threadsafe(self.balance, option, args)
            return

        self.app.clear_input()
        if option is None:
            safe_ensure_future(self.show_balances())

        elif option in OPTIONS:
            if option == "limit":
                balance_asset_limit = self.client_config_map.balance_asset_limit
                if args is None or len(args) == 0:
                    safe_ensure_future(self.show_asset_limits())
                    return
                if len(args) != 3 or validate_exchange(
                        args[0]) is not None or validate_decimal(
                            args[2]) is not None:
                    self.notify("Error: Invalid command arguments")
                    self.notify_balance_limit_set()
                    return
                exchange = args[0]
                asset = args[1].upper()
                amount = float(args[2])
                if balance_asset_limit.get(exchange) is None:
                    balance_asset_limit[exchange] = {}
                if amount < 0 and asset in balance_asset_limit[exchange].keys(
                ):
                    balance_asset_limit[exchange].pop(asset)
                    self.notify(
                        f"Limit for {asset} on {exchange} exchange removed.")
                elif amount >= 0:
                    balance_asset_limit[exchange][asset] = amount
                    self.notify(
                        f"Limit for {asset} on {exchange} exchange set to {amount}"
                    )
                self.save_client_config()

            elif option == "paper":
                paper_balances = self.client_config_map.paper_trade.paper_trade_account_balance
                if args is None or len(args) == 0:
                    safe_ensure_future(self.show_paper_account_balance())
                    return
                if len(args) != 2 or validate_decimal(args[1]) is not None:
                    self.notify("Error: Invalid command arguments")
                    self.notify_balance_paper_set()
                    return
                asset = args[0].upper()
                amount = float(args[1])
                paper_balances[asset] = amount
                self.notify(f"Paper balance for {asset} token set to {amount}")
                self.save_client_config()
 def validate_exchange(cls, v: str):
     """Used for client-friendly error output."""
     ret = validate_exchange(v)
     if ret is not None:
         raise ValueError(ret)
     cls.__fields__[
         "exchange"].type_ = ClientConfigEnum(  # rebuild the exchanges enum
             value="Exchanges",  # noqa: F821
             names={
                 e: e
                 for e in AllConnectorSettings.get_all_connectors()
             },
             type=str,
         )
     return v
示例#6
0
def validate_price_source_derivative(value: str) -> Optional[str]:
    if value == perpetual_market_making_config_map.get("derivative").value:
        return "Price source derivative cannot be the same as maker derivative."
    if validate_derivative(value) is not None and validate_exchange(
            value) is not None:
        return "Price source must must be a valid exchange or derivative connector."
示例#7
0
def validate_price_source_exchange(value: str) -> Optional[str]:
    if value == pure_market_making_config_map.get("exchange").value:
        return "Price source exchange cannot be the same as maker exchange."
    return validate_exchange(value)
示例#8
0
    def test_validate_exchange_connector_exist(self):
        exchange = "binance"

        self.assertIsNone(config_validators.validate_exchange(exchange))
示例#9
0
def validate_price_source_exchange(value: str) -> Optional[str]:
    return validate_exchange(value)