feat: improve Auto-space detection logic

This commit is contained in:
Matthias
2025-11-04 06:54:42 +01:00
parent ab28e43050
commit c091426c44
2 changed files with 22 additions and 13 deletions

View File

@@ -174,21 +174,23 @@ def detect_all_parameters(
attr = getattr(obj, attr_name)
if not issubclass(attr.__class__, BaseParameter):
continue
category = attr.category
if attr.category is None:
# Category auto detection
for category in auto_categories:
if category == attr.category or (
attr_name.startswith(category + "_") and attr.category is None
):
attr.category = category
if attr.category is None or (
attr_name.startswith(category + "_")
auto_category: str | None = None
# Category auto detection
for category in auto_categories:
if attr_name.startswith(category + "_"):
auto_category = category
break
if auto_category is None and attr.category is None:
raise OperationalException(f"Cannot determine parameter space for {attr_name}.")
if auto_category is not None and attr.category is None:
attr.category = auto_category
if (
auto_category is not None
and attr.category is not None
and attr.category != category
and auto_category != attr.category
):
raise OperationalException(
f"Inconclusive parameter name {attr_name}, space: {attr.category}."
f"Conflicting parameter space for {attr_name}: {auto_category} vs {attr.category}."
)
attr.name = attr_name
result[attr.category][attr_name] = attr

View File

@@ -951,7 +951,14 @@ def test_auto_hyperopt_interface(default_conf):
strategy.__class__.sell_rsi = IntParameter([0, 10], default=5, space="buy")
with pytest.raises(OperationalException, match=r"Inconclusive parameter.*"):
with pytest.raises(OperationalException, match=r"Conflicting parameter space.*"):
detect_all_parameters(strategy.__class__)
strategy.__class__.exit22_rsi = IntParameter([0, 10], default=5)
with pytest.raises(
OperationalException, match=r"Cannot determine parameter space for exit22_rsi\."
):
detect_all_parameters(strategy.__class__)