Example #1
0
    async def fetch_all(self):
        tasks = []
        fetched_connectors = []
        for conn_setting in CONNECTOR_SETTINGS.values():
            module_name = f"{conn_setting.base_name()}_connector" if conn_setting.type is ConnectorType.Connector \
                else f"{conn_setting.base_name()}_api_order_book_data_source"
            module_path = f"hummingbot.connector.{conn_setting.type.name.lower()}." \
                          f"{conn_setting.base_name()}.{module_name}"
            class_name = "".join([o.capitalize() for o in conn_setting.base_name().split("_")]) + \
                         "APIOrderBookDataSource" if conn_setting.type is not ConnectorType.Connector \
                         else "".join([o.capitalize() for o in conn_setting.base_name().split("_")]) + "Connector"
            module = getattr(importlib.import_module(module_path), class_name)
            args = {}
            args = conn_setting.add_domain_parameter(args)
            tasks.append(
                asyncio.wait_for(asyncio.shield(
                    module.fetch_trading_pairs(**args)),
                                 timeout=3))
            fetched_connectors.append(conn_setting.name)

        results = await safe_gather(*tasks, return_exceptions=True)
        self.trading_pairs = dict(zip(fetched_connectors, results))
        # In case trading pair fetching returned timeout, using empty list
        for connector, result in self.trading_pairs.items():
            if isinstance(result, asyncio.TimeoutError):
                self.trading_pairs[connector] = []
        self.ready = True
 async def get_current_balances(
         self,  # type: HummingbotApplication
         market: str):
     if market in self.markets and self.markets[market].ready:
         return self.markets[market].get_all_balances()
     elif "Paper" in market:
         paper_balances = global_config_map[
             "paper_trade_account_balance"].value
         if paper_balances is None:
             return {}
         return {
             token: Decimal(str(bal))
             for token, bal in paper_balances.items()
         }
     elif "perpetual_finance" == market:
         return await UserBalances.xdai_balances()
     else:
         gateway_eth_connectors = [
             cs.name for cs in CONNECTOR_SETTINGS.values() if
             cs.use_ethereum_wallet and cs.type == ConnectorType.Connector
         ]
         if market in gateway_eth_connectors:
             return await UserBalances.instance().eth_n_erc20_balances()
         else:
             await UserBalances.instance().update_exchange_balance(market)
             return UserBalances.instance().all_balances(market)
 async def update_exchanges(
         self,
         reconnect: bool = False,
         exchanges: List[str] = []) -> Dict[str, Optional[str]]:
     tasks = []
     # Update user balances, except connectors that use Ethereum wallet.
     if len(exchanges) == 0:
         exchanges = [cs.name for cs in CONNECTOR_SETTINGS.values()]
     exchanges = [
         cs.name for cs in CONNECTOR_SETTINGS.values()
         if not cs.use_ethereum_wallet and cs.name in exchanges
     ]
     if reconnect:
         self._markets.clear()
     for exchange in exchanges:
         tasks.append(self.update_exchange_balance(exchange))
     results = await safe_gather(*tasks)
     return {ex: err_msg for ex, err_msg in zip(exchanges, results)}
    async def fetch_all(self):
        for conn_setting in CONNECTOR_SETTINGS.values():
            module_name = f"{conn_setting.base_name()}_connector" if conn_setting.type is ConnectorType.Connector \
                else f"{conn_setting.base_name()}_api_order_book_data_source"
            module_path = f"hummingbot.connector.{conn_setting.type.name.lower()}." \
                          f"{conn_setting.base_name()}.{module_name}"
            class_name = "".join([o.capitalize() for o in conn_setting.base_name().split("_")]) + \
                         "APIOrderBookDataSource" if conn_setting.type is not ConnectorType.Connector \
                         else "".join([o.capitalize() for o in conn_setting.base_name().split("_")]) + "Connector"
            module = getattr(importlib.import_module(module_path), class_name)
            args = {}
            args = conn_setting.add_domain_parameter(args)
            safe_ensure_future(
                self.call_fetch_pairs(module.fetch_trading_pairs(**args),
                                      conn_setting.name))

        self.ready = True
Example #5
0
    async def get_current_balances(self,  # type: HummingbotApplication
                                   market: str):
        paper_trade_suffix = '_PaperTrade'

        if market in self.markets and self.markets[market].ready:
            return self.markets[market].get_all_balances()
        elif paper_trade_suffix in market:
            return self.markets[market[:-len(paper_trade_suffix)]].get_all_balances()
        elif "perpetual_finance" == market:
            return await UserBalances.xdai_balances()
        else:
            gateway_eth_connectors = [cs.name for cs in CONNECTOR_SETTINGS.values() if cs.use_ethereum_wallet and
                                      cs.type == ConnectorType.Connector]
            if market in gateway_eth_connectors:
                return await UserBalances.instance().eth_n_erc20_balances()
            else:
                await UserBalances.instance().update_exchange_balance(market)
                return UserBalances.instance().all_balances(market)
Example #6
0
    async def fetch_all(self):
        tasks = []
        fetched_connectors = []
        for conn_setting in CONNECTOR_SETTINGS.values():
            module_name = f"{conn_setting.base_name()}_utils" if conn_setting.type is ConnectorType.Connector \
                else f"{conn_setting.base_name()}_api_order_book_data_source"
            module_path = f"hummingbot.connector.{conn_setting.type.name.lower()}." \
                          f"{conn_setting.base_name()}.{module_name}"
            if conn_setting.type is ConnectorType.Connector:
                module = importlib.import_module(module_path)
            else:
                class_name = "".join([o.capitalize() for o in conn_setting.base_name().split("_")]) + \
                             "APIOrderBookDataSource"
                module = getattr(importlib.import_module(module_path),
                                 class_name)
            args = {}
            args = conn_setting.add_domain_parameter(args)
            tasks.append(module.fetch_trading_pairs(**args))
            fetched_connectors.append(conn_setting.name)

        results = await safe_gather(*tasks, return_exceptions=True)
        self.trading_pairs = dict(zip(fetched_connectors, results))
        self.ready = True
Example #7
0
from hummingbot.client.command.connect_command import OPTIONS as CONNECT_OPTIONS
from hummingbot.core.rate_oracle.rate_oracle import RateOracleSource


def file_name_list(path, file_extension):
    if not exists(path):
        return []
    return sorted([
        f for f in listdir(path)
        if isfile(join(path, f)) and f.endswith(file_extension)
    ])


SPOT_PROTOCOL_CONNECTOR = {
    x.name
    for x in CONNECTOR_SETTINGS.values() if x.type == ConnectorType.Connector
}
DERIVATIVE_PROTOCOL_CONNECTOR = {
    x.name
    for x in CONNECTOR_SETTINGS.values()
    if x.type == ConnectorType.Derivative and not x.centralised
}


class HummingbotCompleter(Completer):
    def __init__(self, hummingbot_application):
        super(HummingbotCompleter, self).__init__()
        self.hummingbot_application = hummingbot_application
        self._path_completer = WordCompleter(
            file_name_list(CONF_FILE_PATH, "yml"))
        self._command_completer = WordCompleter(self.parser.commands,