mirror of
https://github.com/xavierchuan/FX-ML-Trading-Engine.git
synced 2026-08-25 06:48:05 +00:00
Add files via upload
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user