feat: be clear on the use of demo exchanges

This commit is contained in:
Matthias
2026-04-08 18:34:35 +02:00
parent 8b204c75cb
commit 36b427cd3b
2 changed files with 22 additions and 5 deletions
+3 -3
View File
@@ -249,7 +249,7 @@ class Exchange:
# Holds all open sell orders for dry_run # Holds all open sell orders for dry_run
self._dry_run_open_orders: dict[str, Any] = {} self._dry_run_open_orders: dict[str, Any] = {}
self._is_demo_trading = exchange_conf.get("demo_trading", False)
if self._config["dry_run"]: if self._config["dry_run"]:
logger.info("Instance is running with dry_run enabled") logger.info("Instance is running with dry_run enabled")
logger.info(f"Using CCXT {ccxt.__version__}") logger.info(f"Using CCXT {ccxt.__version__}")
@@ -437,12 +437,12 @@ class Exchange:
@property @property
def name(self) -> str: def name(self) -> str:
"""exchange Name (from ccxt)""" """exchange Name (from ccxt)"""
return self._api.name return self._api.name if not self._is_demo_trading else f"{self._api.name} (Demo)"
@property @property
def id(self) -> str: def id(self) -> str:
"""exchange ccxt id""" """exchange ccxt id"""
return self._api.id return self._api.id if not self._is_demo_trading else f"{self._api.id}_demo"
@property @property
def timeframes(self) -> list[str]: def timeframes(self) -> list[str]:
+19 -2
View File
@@ -4312,12 +4312,29 @@ def test_fetch_order_or_stoploss_order(default_conf, mocker):
@pytest.mark.parametrize("exchange_name", EXCHANGES) @pytest.mark.parametrize("exchange_name", EXCHANGES)
def test_name(default_conf, mocker, exchange_name): def test_name(default_conf_usdt, mocker, exchange_name):
exchange = get_patched_exchange(mocker, default_conf, exchange=exchange_name) # exchange = get_patched_exchange(mocker, default_conf_usdt, exchange=exchange_name)
api_mock = MagicMock()
api_mock.name = exchange_name.title()
api_mock.id = exchange_name
mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock))
mocker.patch(f"{EXMS}._load_async_markets")
# mocker.patch(f"{EXMS}.validate_timeframes")
# mocker.patch(f"{EXMS}.validate_stakecurrency")
# mocker.patch(f"{EXMS}.validate_pricing")
default_conf_usdt["exchange"]["name"] = "exchange_name"
exchange = ExchangeResolver.load_exchange(default_conf_usdt, validate=False)
assert exchange.name == exchange_name.title() assert exchange.name == exchange_name.title()
assert exchange.id == exchange_name assert exchange.id == exchange_name
default_conf_usdt["exchange"]["demo_trading"] = True
exchange_demo = ExchangeResolver.load_exchange(default_conf_usdt, validate=False)
assert exchange_demo.name == f"{exchange_name.title()} (Demo)"
assert exchange_demo.id == f"{exchange_name}_demo"
@pytest.mark.parametrize( @pytest.mark.parametrize(
"trading_mode,amount", "trading_mode,amount",