Add files via upload

This commit is contained in:
xiaochuan
2025-11-14 23:16:51 +00:00
committed by GitHub
parent 8c9371683e
commit 53c7aa9182
85 changed files with 6789 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
# strategies/__init__.py
from typing import Dict, Callable, Any
# 策略注册表:name -> class
_REGISTRY: Dict[str, Callable[..., Any]] = {}
def register(name: str):
"""用作装饰器:@register('sma_atr')"""
def deco(cls):
_REGISTRY[name] = cls
return cls
return deco
def _lazy_import_all():
"""
懒加载:首次 load_strategy 时再导入具体策略文件,
这样不会因为循环依赖或路径问题导致注册表是空的。
"""
# 在这里逐个导入具体策略模块;导入发生时模块内的 @register 会把类放进 _REGISTRY
from . import sma_atr # noqa: F401
from . import regime_sma # noqa: F401
from . import band_mean_revert # noqa: F401
from . import bollinger_mean_revert # noqa: F401
from . import ma_crossover # noqa: F401
from . import momentum # noqa: F401
from . import xgb_signal # noqa: F401
def load_strategy(name: str, **kwargs):
# 第一次用时尝试懒加载,填充注册表
if not _REGISTRY:
_lazy_import_all()
if name not in _REGISTRY:
# 再尝试一次(防止用户后来才添加文件)
_lazy_import_all()
if name not in _REGISTRY:
raise ValueError(f"Unknown strategy: {name}. Available: {list(_REGISTRY.keys())}")
return _REGISTRY[name](**kwargs)