2025-04-28 21:58:30 +08:00

74 lines
1.9 KiB
Python

#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