async def METHOD_NAME(exchange_name, exchange_tentacle_name, config=None,
                                             credentials_exchange_name=None):
    credentials_exchange_name = credentials_exchange_name or exchange_name
    _load_exchange_creds_env_variables_if_necessary()
    config = {**test_config.load_test_config(), **config} if config else test_config.load_test_config()
    if exchange_name not in config[commons_constants.CONFIG_EXCHANGES]:
        config[commons_constants.CONFIG_EXCHANGES][exchange_name] = {}
    config[commons_constants.CONFIG_EXCHANGES][exchange_name].update(_get_exchange_auth_details(
        credentials_exchange_name
    ))
    exchange_type = config[commons_constants.CONFIG_EXCHANGES][exchange_name].get(
        commons_constants.CONFIG_EXCHANGE_TYPE, exchanges.get_default_exchange_type(exchange_name))
    exchange_builder = trading_api.create_exchange_builder(config, exchange_name) \
        .has_matrix("") \
        .use_tentacles_setup_config(get_tentacles_setup_config_with_exchange(exchange_tentacle_name)) \
        .set_bot_id("") \
        .is_real() \
        .is_checking_credentials(False) \
        .is_sandboxed(_get_exchange_is_sandboxed(credentials_exchange_name)) \
        .is_using_exchange_type(exchange_type) \
        .enable_storage(False) \
        .disable_trading_mode() \
        .is_exchange_only()
    exchange_manager_instance = await exchange_builder.build()
    # create trader afterwards to init exchange personal data
    exchange_manager_instance.trader.is_enabled = True
    await exchange_manager_instance.register_trader(exchange_manager_instance.trader)
    exchange_manager_instance.exchange_backend = trading_backend.exchange_factory.create_exchange_backend(
        exchange_manager_instance.exchange
    )
    exchange_manager_instance.exchange.__class__.PRINT_DEBUG_LOGS = True
    set_mocked_required_channels(exchange_manager_instance)
    try:
        yield exchange_manager_instance
    except errors.UnreachableExchange as err:
        raise errors.UnreachableExchange(f"{exchange_name} can't be reached, it is either offline or you are not connected "
                                         "to the internet (or a proxy is preventing connecting to this exchange).") \
            from err
    finally:
        await exchange_manager_instance.stop()
        trading_api.cancel_ccxt_throttle_task()
        # let updaters gracefully shutdown
        await asyncio_tools.wait_asyncio_next_cycle()