fix: 一键寻优所有策略补齐 35 个新策略预设网格(STRATEGY_PRESETS 19→54,网格点 174→328)+ 注册表↔预设一致性回归测试

This commit is contained in:
Justin Gu
2026-09-03 03:27:04 +08:00
parent 62e80d892e
commit e866e82299
2 changed files with 172 additions and 0 deletions
+49
View File
@@ -166,3 +166,52 @@ class TestParamGridOptimizer:
)
with pytest.raises(KeyError):
opt.run()
class TestStrategyPresets:
"""预设网格与策略注册表的一致性。
「一键寻优所有策略」只遍历 STRATEGY_PRESETSbacktest.py optimize-all),
未登记的策略会被静默跳过——v1.30.2 曾因此只寻优 19/54 个策略。
这里双向锁定:每个已注册策略必须有预设,且网格合法。
"""
def test_every_registered_strategy_has_preset(self) -> None:
"""注册表与 STRATEGY_PRESETS 键集一一对应(双向:不多不少)。"""
from easy_tdx.backtest.strategies import (
builtin, # noqa: F401 # 触发注册
get_registry,
)
from easy_tdx.backtest.strategies.presets import STRATEGY_PRESETS
names = set(get_registry().names())
missing = names - set(STRATEGY_PRESETS)
extra = set(STRATEGY_PRESETS) - names
assert not missing, f"这些策略无预设网格,会被一键寻优静默跳过: {sorted(missing)}"
assert not extra, f"这些预设指向未注册的策略: {sorted(extra)}"
def test_preset_values_within_param_bounds(self) -> None:
"""预设取值必须在参数 schema 边界内(否则寻优端点 422)。"""
from easy_tdx.backtest.strategies import (
builtin, # noqa: F401 # 触发注册
get_registry,
)
from easy_tdx.backtest.strategies.presets import STRATEGY_PRESETS
registry = get_registry()
for name, grid in STRATEGY_PRESETS.items():
params = {p.name: p for p in registry.get(name).params}
for pname, values in grid.items():
assert pname in params, f"{name}: 预设参数 {pname} 不在 schema 中"
for v in values:
params[pname].validate(v) # 越界抛 ValueError
def test_preset_grid_size_within_limit(self) -> None:
"""单策略笛卡尔积 ≤ 200ParamGridOptimizer.MAX_GRID_POINTS)。"""
import math
from easy_tdx.backtest.strategies.presets import STRATEGY_PRESETS
for name, grid in STRATEGY_PRESETS.items():
size = math.prod(len(v) for v in grid.values()) if grid else 1
assert size <= 200, f"{name}: 预设网格 {size} 点超上限"