"""
market Enum
"""
class StrategyMarket(Enum):
"""
market of strategy.
"""
FUTURES = 'futures'
FOREX = 'forex'
VIRTUAL_CION = 'virtual_cion'
import importlib
import os
import traceback
from pathlib import Path
from op_futures.op_strategy_plugins.template_strategy import TemplateStrategy
from tqz_extern.tqz_constant import StrategyMarket
class StrategyClasses:
@classmethod
def load_config(cls, strategy_market: StrategyMarket) -> dict:
""" """
root = Path(__file__).parent.parent
strategies_path = root.joinpath(f'op_{strategy_market.value}', 'op_strategy_plugins')
module_name = f'op_{strategy_market.value}.op_strategy_plugins'
strategies_classes = {}
for _, _, filenames in os.walk(strategies_path):
for filename in filenames:
if filename.endswith(".py"):
strategy_module_name = ".".join(
[module_name, filename.replace(".py", "")])
try:
module = importlib.import_module(strategy_module_name)
importlib.reload(module)
for name in dir(module):
value = getattr(module, name)
if isinstance(value, type) and issubclass(value, TemplateStrategy) and value is not TemplateStrategy:
strategies_classes[value.__name__] = value
except: # noqa
assert False, f"策略文件{module_name}加载失败,触发异常:\n{traceback.format_exc()}"
return strategies_classes
if __name__ == '__main__':
ret = StrategyClasses.load_config(strategy_market=StrategyMarket.FUTURES)