# encoding: UTF-8 ''' 动态载入所有的策略类 ''' import os import importlib import traceback # 用来保存策略类的字典 STRATEGY_CLASS = {} # 获取目录路径 path = os.path.abspath(os.path.dirname(__file__)) # 遍历strategy目录下的文件 for root, subdirs, files in os.walk(path): for name in files: # 只有文件名中包含strategy且非.pyc的文件,才是策略文件 if 'strategy' in name and '.pyc' not in name: # 模块名称需要上前缀 moduleName = 'ctaStrategy.strategy.' + name.replace('.py', '') # 使用importlib动态载入模块 try: module = importlib.import_module(moduleName) # 遍历模块下的对象,只有名称中包含'Strategy'的才是策略类 for k in dir(module): if 'Strategy' in k: v = module.__getattribute__(k) STRATEGY_CLASS[k] = v except: print('-' * 20) print('Failed to import strategy file %s:' %moduleName) traceback.print_exc()