| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- 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))
-
|