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 'final_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: ### 加点意义不明的计算 num = 0 for i in range(99999): num += i ### 避免supervisor管理错误 params = utils.get_params(fname) params_pool = utils._get_params("http://wwww.khods.com:8888/get_params", params.proxy, {"exchange":params.exchange}) # 选出本交易所的数据 profits = [] for p_name in params_pool: if params.exchange in p_name: profit = float(params_pool[p_name]['profit']) profits.append(max(profit,0.00001)) if len(params_pool) > 0: random_params = params_pool[random.choices(list(params_pool.keys()),weights=profits,k=1)[0]] # 切换参数 params.pair = random_params['pair'] params.refpair = str(random_params['refpair']) params.refexchange = str(random_params['refexchange']) params.open = random_params['open'] if 'open' in random_params else "0.003" params.close = random_params['close'] if 'close' in random_params else "0.0001" leverrate = random_params['leverrate'] if 'leverrate' in random_params else "1.0" if float(leverrate) == 0.5: # 随机分配的参数 params.leverrate = leverrate elif float(leverrate) == 2.0: # 来自盈利组的参数 min_profit = min(profits) max_profit = max(profits) if min_profit == max_profit: leverrate = 2.0 else: leverrate = round(0.5 + 1.5*(random_params['profit'] - min_profit)/(max_profit-min_profit),1) params.leverrate = str(leverrate) else: # 其他参数 params.leverrate = leverrate with open(fname, 'w+') as fp: toml.dump(params.__dict__, fp) if exe: quant = subprocess.Popen(['./final_quant', '-c', fname, '-log_file', log_file, '-num', pidnum, '-child']) else: quant = subprocess.Popen(['python3', 'quant.py', '-c', fname, '-log_file', log_file, '-num', pidnum, '-child']) wait_time = random.randint(utils.CHILD_RUN_SECOND*0.8,utils.CHILD_RUN_SECOND) 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))