mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-12-16 04:41:15 +00:00
feat: improve Auto-space detection logic
This commit is contained in:
@@ -174,21 +174,23 @@ def detect_all_parameters(
|
|||||||
attr = getattr(obj, attr_name)
|
attr = getattr(obj, attr_name)
|
||||||
if not issubclass(attr.__class__, BaseParameter):
|
if not issubclass(attr.__class__, BaseParameter):
|
||||||
continue
|
continue
|
||||||
category = attr.category
|
auto_category: str | None = None
|
||||||
if attr.category is None:
|
# Category auto detection
|
||||||
# Category auto detection
|
for category in auto_categories:
|
||||||
for category in auto_categories:
|
if attr_name.startswith(category + "_"):
|
||||||
if category == attr.category or (
|
auto_category = category
|
||||||
attr_name.startswith(category + "_") and attr.category is None
|
break
|
||||||
):
|
if auto_category is None and attr.category is None:
|
||||||
attr.category = category
|
raise OperationalException(f"Cannot determine parameter space for {attr_name}.")
|
||||||
if attr.category is None or (
|
if auto_category is not None and attr.category is None:
|
||||||
attr_name.startswith(category + "_")
|
attr.category = auto_category
|
||||||
|
if (
|
||||||
|
auto_category is not None
|
||||||
and attr.category is not None
|
and attr.category is not None
|
||||||
and attr.category != category
|
and auto_category != attr.category
|
||||||
):
|
):
|
||||||
raise OperationalException(
|
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
|
attr.name = attr_name
|
||||||
result[attr.category][attr_name] = attr
|
result[attr.category][attr_name] = attr
|
||||||
|
|||||||
@@ -951,7 +951,14 @@ def test_auto_hyperopt_interface(default_conf):
|
|||||||
|
|
||||||
strategy.__class__.sell_rsi = IntParameter([0, 10], default=5, space="buy")
|
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__)
|
detect_all_parameters(strategy.__class__)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user