2017-02-12 03:14:27 +00:00
|
|
|
|
# encoding: UTF-8
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
动态载入所有的策略类
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
import importlib
|
2017-04-24 14:54:21 +00:00
|
|
|
|
import traceback
|
2017-03-26 22:49:28 +00:00
|
|
|
|
|
2017-02-12 03:14:27 +00:00
|
|
|
|
# 用来保存策略类的字典
|
|
|
|
|
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:
|
|
|
|
|
# 模块名称需要上前缀
|
2017-03-18 04:19:51 +00:00
|
|
|
|
moduleName = 'ctaStrategy.strategy.' + name.replace('.py', '')
|
2017-02-12 03:14:27 +00:00
|
|
|
|
|
|
|
|
|
# 使用importlib动态载入模块
|
2017-04-24 14:54:21 +00:00
|
|
|
|
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()
|