74 lines
1.9 KiB
Python
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
|
|
|