#coding:utf-8 from .functions import * def run_file(user_script, param = {}): import os, sys, time, types from .contextinfo import ContextInfo from .stgframe import StrategyLoader pypath = param.get('pythonpath') if pypath: lib_search = [os.path.abspath(p) for p in pypath.split(';')] sys.path = lib_search + [p for p in sys.path if p not in lib_search] user_module = compile(open(user_script, 'rb').read(), user_script, 'exec', optimize = 2) #print({'user_module': user_module}) try: pywentrance = param.get('pywentrance', '') user_variable = compile(open(os.path.join(pywentrance, "..", "user_config.py"), "rb").read(), "user_config.py", 'exec', optimize=2) exec(user_variable, globals()) except Exception as e: pass exec(user_module, globals()) _C = ContextInfo() _C._param = param _C.user_script = user_script def try_set_func(C, func_name): func = globals().get(func_name) if func: C.__setattr__(func_name, types.MethodType(func, C)) return try_set_func(_C, 'init') try_set_func(_C, 'after_init') try_set_func(_C, 'handlebar') try_set_func(_C, 'on_backtest_finished') try_set_func(_C, 'stop') try_set_func(_C, 'account_callback') try_set_func(_C, 'order_callback') try_set_func(_C, 'deal_callback') try_set_func(_C, 'position_callback') try_set_func(_C, 'orderError_callback') loader = StrategyLoader() loader.C = _C loader.init() loader.start() loader.run() loader.stop() loader.shutdown() mode = _C.trade_mode if mode == 'backtest': from .stgframe import BackTestResult return BackTestResult(_C.request_id) if mode in ['simulation', 'trading']: while True: time.sleep(2) from .stgframe import Result return Result(_C.request_id) return None