async def test_add_exchange(self):
        config = await self.init_default()

        exchange_manager_binance = ExchangeManager(config, "binance")
        await exchange_manager_binance.initialize()
        Exchanges.instance().add_exchange(exchange_manager_binance, "")

        exchange_manager_bitmex = ExchangeManager(config, "bitmex")
        await exchange_manager_bitmex.initialize()
        Exchanges.instance().add_exchange(exchange_manager_bitmex, "")

        exchange_manager_poloniex = ExchangeManager(config, "poloniex")
        await exchange_manager_poloniex.initialize()
        Exchanges.instance().add_exchange(exchange_manager_poloniex, "")

        assert "binance" in Exchanges.instance().exchanges
        assert "bitmex" in Exchanges.instance().exchanges
        assert "poloniex" in Exchanges.instance().exchanges
        assert "test" not in Exchanges.instance().exchanges

        await exchange_manager_binance.stop()
        await exchange_manager_bitmex.stop()
        await exchange_manager_poloniex.stop()
        cancel_ccxt_throttle_task()
        # let updaters gracefully shutdown
        await wait_asyncio_next_cycle()
    async def test_traded_pairs_with_invalid_wildcard(self):
        config = load_test_config()

        # missing quote key
        config[CONFIG_CRYPTO_CURRENCIES] = {
            "Bitcoin": {
                "pairs": ["*"]
            },
            "Ethereum": {
                "enabled": True,
                "pairs": ["*"],
                "quote": "ETH"
            }
        }
        _, exchange_manager = await self.init_default(config=config)

        assert "ETC/ETH" in exchange_manager.exchange_config.traded_symbol_pairs
        assert "ADA/ETH" in exchange_manager.exchange_config.traded_symbol_pairs
        assert "BNB/ETH" in exchange_manager.exchange_config.all_config_symbol_pairs
        assert "ADA/ETH" in exchange_manager.exchange_config.all_config_symbol_pairs
        assert "Ethereum" in exchange_manager.exchange_config.traded_cryptocurrencies

        # invalid BTC wildcard config
        assert "Bitcoin" not in exchange_manager.exchange_config.traded_cryptocurrencies

        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
    async def test_traded_pairs_with_add(self):
        config = load_test_config()
        config[CONFIG_CRYPTO_CURRENCIES] = {
            "Bitcoin": {
                "pairs": "*",
                "quote": "BTC",
                "add": ["BTC/USDT"]
            }
        }

        _, exchange_manager = await self.init_default(config=config)

        assert "ICX/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "NEO/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "VEN/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "XLM/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "ONT/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "BTC/USDT" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "ETH/USDT" not in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "NEO/BNB" not in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
    async def test_get_exchange(self):
        config = await self.init_default()

        exchange_manager_binance = ExchangeManager(config, "binance")
        await exchange_manager_binance.initialize()
        Exchanges.instance().add_exchange(exchange_manager_binance, "")

        exchange_manager_bitmex = ExchangeManager(config, "bitmex")
        await exchange_manager_bitmex.initialize()
        Exchanges.instance().add_exchange(exchange_manager_bitmex, "")

        exchange_manager_poloniex = ExchangeManager(config, "poloniex")
        await exchange_manager_poloniex.initialize()
        Exchanges.instance().add_exchange(exchange_manager_poloniex, "")

        assert Exchanges.instance().get_exchanges_list(
            "binance")[0].exchange_manager is exchange_manager_binance
        assert Exchanges.instance().get_exchanges_list(
            "bitmex")[0].exchange_manager is exchange_manager_bitmex
        assert Exchanges.instance().get_exchanges_list(
            "poloniex")[0].exchange_manager is exchange_manager_poloniex

        with pytest.raises(KeyError):
            assert Exchanges.instance().get_exchanges_list("test")

        await exchange_manager_binance.stop()
        await exchange_manager_bitmex.stop()
        await exchange_manager_poloniex.stop()
        cancel_ccxt_throttle_task()
        # let updaters gracefully shutdown
        await wait_asyncio_next_cycle()
    async def test_traded_pairs(self):
        config = load_test_config()
        config[CONFIG_CRYPTO_CURRENCIES] = {
            "Neo": {
                "pairs": ["NEO/BTC"]
            },
            "Ethereum": {
                "enabled": True,
                "pairs": ["ETH/USDT"]
            },
            "Icon": {
                "enabled": False,
                "pairs": ["ICX/BTC"]
            }
        }

        _, exchange_manager = await self.init_default(config=config)

        assert exchange_manager.exchange_config.traded_cryptocurrencies == {
            "Ethereum": ["ETH/USDT"],
            "Neo": ["NEO/BTC"]
        }
        all_pairs = sorted(["NEO/BTC", "ETH/USDT", "ICX/BTC"])
        all_enabled_pairs = sorted(["NEO/BTC", "ETH/USDT"])
        assert sorted(exchange_manager.exchange_config.traded_symbol_pairs
                      ) == all_enabled_pairs
        assert sorted(exchange_manager.exchange_config.all_config_symbol_pairs
                      ) == all_pairs
        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
示例#6
0
    async def test_create_exchange(self):
        # simulated
        config, exchange_manager = await self.init_default(simulated=True,
                                                           backtesting=True)

        assert exchange_manager is not None
        assert exchange_manager.exchange_name is TestExchangeManager.EXCHANGE_NAME

        assert exchange_manager.exchange.authenticated() is False

        assert exchange_manager.config is config

        assert isinstance(exchange_manager.exchange, SpotExchangeSimulator)
        await exchange_manager.stop()

        # real
        config, exchange_manager = await self.init_default(simulated=False)

        assert exchange_manager is not None
        assert exchange_manager.exchange_name is TestExchangeManager.EXCHANGE_NAME

        assert exchange_manager.config is config

        assert isinstance(exchange_manager.exchange, SpotExchange)
        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
async def test_create_basic(exchange_builder):
    exchange_builder.disable_trading_mode()
    exchange_manager = await exchange_builder.build()

    assert exchange_manager is not None
    assert exchange_manager.exchange_name == "bitmex"

    cancel_ccxt_throttle_task()
    await exchange_manager.stop()
示例#8
0
async def future_exchange_manager():
    exchange_manager_instance = ExchangeManager(load_test_config(),
                                                DEFAULT_EXCHANGE_NAME)
    exchange_manager_instance.is_spot_only = False
    exchange_manager_instance.is_future = True
    await exchange_manager_instance.initialize()
    yield exchange_manager_instance
    cancel_ccxt_throttle_task()
    await exchange_manager_instance.stop()
    # let updaters gracefully shutdown
    await wait_asyncio_next_cycle()
示例#9
0
async def get_exchange_manager(exchange_name, config=None):
    config = config or load_test_config()
    if exchange_name not in config[CONFIG_EXCHANGES]:
        config[CONFIG_EXCHANGES][exchange_name] = {}
    exchange_manager_instance = ExchangeManager(config, exchange_name)
    await exchange_manager_instance.initialize()
    try:
        yield exchange_manager_instance
    finally:
        await exchange_manager_instance.stop()
        cancel_ccxt_throttle_task()
        # let updaters gracefully shutdown
        await wait_asyncio_next_cycle()
示例#10
0
async def simulated_exchange_manager(request):
    config = load_test_config()
    exchange_name = "binance"
    if hasattr(request, "param"):
        config, exchange_name = request.param

    exchange_manager_instance = ExchangeManager(config, exchange_name)
    exchange_manager_instance.is_simulated = True
    await exchange_manager_instance.initialize()
    yield exchange_manager_instance
    cancel_ccxt_throttle_task()
    await exchange_manager_instance.stop()
    # let updaters gracefully shutdown
    await wait_asyncio_next_cycle()
示例#11
0
async def exchange_manager(request):
    config = None
    exchange_name = "binance"
    if hasattr(request, "param"):
        config, exchange_name = request.param

    exchange_manager_instance = ExchangeManager(
        config if config is not None else load_test_config(), exchange_name)
    await exchange_manager_instance.initialize()
    yield exchange_manager_instance
    await exchange_manager_instance.stop()
    cancel_ccxt_throttle_task()
    # let updaters gracefully shutdown
    await wait_asyncio_next_cycle()
    async def test_traded_pairs_with_add(self):
        config = load_test_config()
        config[CONFIG_CRYPTO_CURRENCIES] = {
            "Bitcoin": {
                "pairs": ["*"],
                "quote": "BTC",
                "add": ["BTC/USDT"]
            },
            "Ethereum": {
                "enabled": False,
                "pairs": ["*"],
                "quote": "ETH",
                "add": ["ETH/USDT"]
            }
        }

        _, exchange_manager = await self.init_default(config=config)

        assert "ICX/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "NEO/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "VEN/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "XLM/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "ONT/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "BTC/USDT" in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "ETH/USDT" not in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "NEO/BNB" not in exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"]
        assert "BTC/USDT" in exchange_manager.exchange_config.traded_symbol_pairs
        assert "BTC/USDT" in exchange_manager.exchange_config.all_config_symbol_pairs

        # disabled
        assert "Ethereum" not in exchange_manager.exchange_config.traded_cryptocurrencies
        assert "ADA/ETH" not in exchange_manager.exchange_config.traded_symbol_pairs
        assert "ADA/ETH" in exchange_manager.exchange_config.all_config_symbol_pairs
        assert "ETH/USDT" not in exchange_manager.exchange_config.traded_symbol_pairs
        assert "ETH/USDT" in exchange_manager.exchange_config.all_config_symbol_pairs
        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
示例#13
0
async def exchange_manager(request):
    config = None
    exchange_name = DEFAULT_EXCHANGE_NAME
    is_spot = True
    is_margin = False
    is_future = False
    if hasattr(request, "param"):
        config, exchange_name, is_spot, is_margin, is_future = request.param

    exchange_manager_instance = ExchangeManager(config if config is not None else load_test_config(), exchange_name)
    exchange_manager_instance.is_spot_only = is_spot
    exchange_manager_instance.is_margin = is_margin
    exchange_manager_instance.is_future = is_future
    await exchange_manager_instance.initialize()
    yield exchange_manager_instance
    cancel_ccxt_throttle_task()
    await exchange_manager_instance.stop()
    # let updaters gracefully shutdown
    await wait_asyncio_next_cycle()
示例#14
0
async def stop_bot(bot):
    # force all logger enable to display any error
    stop_logger = get_logger("StopBotLogger")
    import logging
    for logger in logging.Logger.manager.loggerDict.values():
        logger.disabled = False

    stop_logger.info("Stopping tasks...")
    await bot.stop()

    if bot.task_manager.tools_task_group:
        bot.task_manager.tools_task_group.cancel()

    # close community session
    if bot.community_handler:
        await bot.community_handler.stop_task()

    cancel_ccxt_throttle_task()

    stop_logger.info("Tasks stopped.")
示例#15
0
    async def test_get_is_overloaded(self):
        # simulated
        config, exchange_manager = await self.init_default(simulated=True,
                                                           backtesting=True)

        # few traded elements
        exchange_manager.exchange_config.traded_symbol_pairs = [0] * 3
        exchange_manager.exchange_config.traded_time_frames = [0] * 3
        assert exchange_manager.get_currently_handled_pair_with_time_frame(
        ) == 3 * 3
        assert not exchange_manager.get_is_overloaded()

        # too many traded elements
        exchange_manager.exchange_config.traded_symbol_pairs = [0] * 99
        exchange_manager.exchange_config.traded_time_frames = [0] * 99
        assert exchange_manager.get_currently_handled_pair_with_time_frame(
        ) == 99 * 99
        # not overloaded since exchange simulator is not limited in term of traded elements
        assert not exchange_manager.get_is_overloaded()
        await exchange_manager.stop()

        # real
        config, exchange_manager = await self.init_default(simulated=False)

        # few traded elements
        exchange_manager.exchange_config.traded_symbol_pairs = [0] * 3
        exchange_manager.exchange_config.traded_time_frames = [0] * 3
        assert exchange_manager.get_currently_handled_pair_with_time_frame(
        ) == 3 * 3
        assert not exchange_manager.get_is_overloaded()

        # too many traded elements
        exchange_manager.exchange_config.traded_symbol_pairs = [0] * 99
        exchange_manager.exchange_config.traded_time_frames = [0] * 99
        assert exchange_manager.get_currently_handled_pair_with_time_frame(
        ) == 99 * 99
        # overloaded since exchange simulator is limited in term of traded elements
        assert exchange_manager.get_is_overloaded()
        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
    async def test_traded_pairs_with_redundancy(self):
        config = load_test_config()
        config[CONFIG_CRYPTO_CURRENCIES] = {
            "Binance Coin": {
                "pairs": ["BNB/USDT"]
            },
            "Binance USD": {
                "pairs": ["BNB/BUSD"]
            },
            "Bitcoin": {
                "enabled": True,
                "pairs": ["BNB/BTC"]
            },
            "Tether": {
                "enabled": True,
                "pairs": ["BNB/USDT"]
            }
        }

        _, exchange_manager = await self.init_default(config=config)

        assert exchange_manager.exchange_config.traded_cryptocurrencies[
            "Binance Coin"] == ["BNB/USDT"]
        assert exchange_manager.exchange_config.traded_cryptocurrencies[
            "Binance USD"] == ["BNB/BUSD"]
        assert exchange_manager.exchange_config.traded_cryptocurrencies[
            "Bitcoin"] == ["BNB/BTC"]
        assert exchange_manager.exchange_config.traded_cryptocurrencies[
            "Tether"] == ["BNB/USDT"]

        sorted_pairs_without_redundancy = sorted(
            ["BNB/USDT", "BNB/BUSD", "BNB/BTC"])
        assert sorted(exchange_manager.exchange_config.traded_symbol_pairs
                      ) == sorted_pairs_without_redundancy
        assert sorted(exchange_manager.exchange_config.all_config_symbol_pairs
                      ) == sorted_pairs_without_redundancy

        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
    async def test_traded_pairs(self):
        config = load_test_config()
        config[CONFIG_CRYPTO_CURRENCIES] = {
            "Neo": {
                "pairs": ["NEO/BTC"]
            },
            "Ethereum": {
                "pairs": ["ETH/USDT"]
            },
            "Icon": {
                "pairs": ["ICX/BTC"]
            }
        }

        _, exchange_manager = await self.init_default(config=config)

        assert exchange_manager.exchange_config.traded_cryptocurrencies == {
            "Ethereum": ["ETH/USDT"],
            "Icon": ["ICX/BTC"],
            "Neo": ["NEO/BTC"]
        }
        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
示例#18
0
 async def stop(exchange_manager):
     cancel_ccxt_throttle_task()
     await exchange_manager.stop()
     # let updaters gracefully shutdown
     await wait_asyncio_next_cycle()
async def test_stop(backtesting_trader):
    _, exchange_manager, trader_inst = backtesting_trader
    await exchange_manager.exchange.stop()
    cancel_ccxt_throttle_task()
    assert not exchange_manager.exchange.backtesting
    assert not exchange_manager.exchange.exchange_importers
    async def test_ready(self):
        _, exchange_manager = await self.init_default()

        assert exchange_manager.is_ready
        cancel_ccxt_throttle_task()
        await exchange_manager.stop()
 async def stop(exchange_manager):
     cancel_ccxt_throttle_task()
     await exchange_manager.stop()