vnpy/vn.trader/ctaStrategy/strategy/__init__.py

38 lines
1.1 KiB
Python
Raw Normal View History

# 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:
2017-04-27 08:02:43 +00:00
print('-' * 20)
print('Failed to import strategy file %s:' %moduleName)
traceback.print_exc()