MCPcopy Create free account
hub / github.com/shidenggui/easyquant / load

Method load

easyquant/main_engine.py:118–159  ·  view source on GitHub ↗
(self, names, strategy_file)

Source from the content-addressed store, hash-verified

116 self._add_main_shutdown(self.clock_engine.stop)
117
118 def load(self, names, strategy_file):
119 with self.lock:
120 mtime = os.path.getmtime(os.path.join('strategies', strategy_file))
121
122 # 是否需要重新加载
123 reload = False
124
125 strategy_module_name = os.path.basename(strategy_file)[:-3]
126 new_module = lambda strategy_module_name: importlib.import_module('.' + strategy_module_name, 'strategies')
127 strategy_module = self._modules.get(
128 strategy_file, # 从缓存中获取 module 实例
129 new_module(strategy_module_name) # 创建新的 module 实例
130 )
131
132 if self._cache.get(strategy_file, None) == mtime:
133 # 检查最后改动时间
134 return
135 elif self._cache.get(strategy_file, None) is not None:
136 # 注销策略的监听
137 old_strategy = self.get_strategy(strategy_module.Strategy.name)
138 if old_strategy is None:
139 for s in self.strategy_list:
140 print(s.name)
141 self.log.warn(u'卸载策略: %s' % old_strategy.name)
142 self.strategy_listen_event(old_strategy, "unlisten")
143 time.sleep(2)
144 reload = True
145 # 重新加载
146 if reload:
147 strategy_module = importlib.reload(strategy_module)
148
149 self._modules[strategy_file] = strategy_module
150
151 strategy_class = getattr(strategy_module, 'Strategy')
152 if names is None or strategy_class.name in names:
153 self.strategies[strategy_module_name] = strategy_class
154 # 缓存加载信息
155 new_strategy = strategy_class(user=self.user, log_handler=self.log, main_engine=self)
156 self.strategy_list.append(new_strategy)
157 self._cache[strategy_file] = mtime
158 self.strategy_listen_event(new_strategy, "listen")
159 self.log.info(u'加载策略: %s' % strategy_module_name)
160
161 def strategy_listen_event(self, strategy, _type="listen"):
162 """

Callers 2

load_strategyMethod · 0.95
file2dictMethod · 0.45

Calls 2

get_strategyMethod · 0.95
strategy_listen_eventMethod · 0.95

Tested by

no test coverage detected