import utils import time import subprocess import signal import os, sys import toml, json import random if __name__ == "__main__": exe = 0 for root, dirs, files in os.walk(os.getcwd()): for file_name in files: if 'dummy_quant' in file_name: exe = 1 quant = None def keyboard_interrupt(s, f): for _ in range(9): try: quant.terminate() time.sleep(10) break except: pass os._exit(0) try: signal.signal(signal.SIGINT, keyboard_interrupt) signal.signal(signal.SIGTERM, keyboard_interrupt) if 'win' not in sys.platform: signal.signal(signal.SIGKILL, keyboard_interrupt) signal.signal(signal.SIGQUIT, keyboard_interrupt) except: pass if 0: utils.check_auth() pnum = len(sys.argv) fname = 'config.toml' log_file = "" pidnum = "" if pnum > 0: for i in range(pnum): if sys.argv[i] == '-c' or sys.argv[i] == '--c': fname = sys.argv[i+1] elif sys.argv[i] == '-log_file' or sys.argv[i] == '--log_file': log_file = sys.argv[i+1] elif sys.argv[i] == '-num' or sys.argv[i] == '--num': pidnum = sys.argv[i+1] while 1: params = utils.get_params(fname) params_pool = utils._get_params("http://wwww.khods.com:8888/get_dummy_params", params.proxy, {"exchange":params.exchange}) # 选出本交易所的数据 params_temp = [] for p_name in params_pool: if params.exchange in p_name: profit = float(params_pool[p_name]['profit']) for _ in range(1+int(profit//0.01)): params_temp.append(params_pool[p_name]) if len(params_temp) > 0: max_params = random.choice(params_temp) # 切换参数 params.pair = max_params['pair'] params.refpair = str(max_params['refpair']) params.refexchange = str(max_params['refexchange']) params.open = max_params['open'] if 'open' in max_params else "0.003" params.close = max_params['close'] if 'close' in max_params else "0.0001" params.leverrate = max_params['leverrate'] if 'leverrate' in max_params else "1.0" with open(fname, 'w+') as fp: toml.dump(params.__dict__, fp) if exe: quant = subprocess.Popen(['./dummy_quant', '-c', fname, '-log_file', log_file, '-num', pidnum, '-child']) else: quant = subprocess.Popen(['python3', 'dummy.py', '-c', fname, '-log_file', log_file, '-num', pidnum, '-child']) wait_time = random.randint(utils.DUMMY_RUN_SECOND+60,utils.DUMMY_RUN_SECOND+120) check_num = 10000 wait_time_per_loop = wait_time / check_num for _ in range(check_num): time.sleep(wait_time_per_loop) if quant.poll() is not None: break quant.terminate() # 休息n秒进入下一轮 time.sleep(random.randint(10,15))