25 lines
803 B
Python
25 lines
803 B
Python
"""策略注册表与工厂。
|
||
|
||
新增策略:实现 Strategy(base.py),在此注册 {name: Class},前端下拉即可选。
|
||
策略构造参数由请求的 params(dict) 以 **kwargs 传入。
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from .base import Strategy
|
||
from .macd_cross import MACDCrossStrategy
|
||
from .ma_strategies import MACrossStrategy, SingleMAStrategy
|
||
|
||
STRATEGIES: dict[str, type[Strategy]] = {
|
||
"macd_cross": MACDCrossStrategy,
|
||
"ma_cross": MACrossStrategy,
|
||
"single_ma": SingleMAStrategy,
|
||
}
|
||
|
||
|
||
def build_strategy(name: str, params: dict | None) -> Strategy:
|
||
cls = STRATEGIES.get(name)
|
||
if cls is None:
|
||
raise ValueError(f"未知策略: {name}(可用: {', '.join(STRATEGIES)})")
|
||
kwargs = {k: v for k, v in (params or {}).items()}
|
||
return cls(**kwargs)
|