final.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import utils
  2. import time
  3. import subprocess
  4. import signal
  5. import os, sys
  6. import toml, json
  7. import random
  8. if __name__ == "__main__":
  9. exe = 0
  10. for root, dirs, files in os.walk(os.getcwd()):
  11. for file_name in files:
  12. if 'final_quant' in file_name:
  13. exe = 1
  14. quant = None
  15. def keyboard_interrupt(s, f):
  16. for _ in range(9):
  17. try:
  18. quant.terminate()
  19. time.sleep(10)
  20. break
  21. except:
  22. pass
  23. os._exit(0)
  24. try:
  25. signal.signal(signal.SIGINT, keyboard_interrupt)
  26. signal.signal(signal.SIGTERM, keyboard_interrupt)
  27. if 'win' not in sys.platform:
  28. signal.signal(signal.SIGKILL, keyboard_interrupt)
  29. signal.signal(signal.SIGQUIT, keyboard_interrupt)
  30. except:
  31. pass
  32. if 0:
  33. utils.check_auth()
  34. pnum = len(sys.argv)
  35. fname = 'config.toml'
  36. log_file = ""
  37. pidnum = ""
  38. if pnum > 0:
  39. for i in range(pnum):
  40. if sys.argv[i] == '-c' or sys.argv[i] == '--c':
  41. fname = sys.argv[i+1]
  42. elif sys.argv[i] == '-log_file' or sys.argv[i] == '--log_file':
  43. log_file = sys.argv[i+1]
  44. elif sys.argv[i] == '-num' or sys.argv[i] == '--num':
  45. pidnum = sys.argv[i+1]
  46. while 1:
  47. ### 加点意义不明的计算
  48. num = 0
  49. for i in range(99999):
  50. num += i
  51. ### 避免supervisor管理错误
  52. params = utils.get_params(fname)
  53. params_pool = utils._get_params("http://wwww.khods.com:8888/get_params", params.proxy, {"exchange":params.exchange})
  54. # 选出本交易所的数据
  55. profits = []
  56. for p_name in params_pool:
  57. if params.exchange in p_name:
  58. profit = float(params_pool[p_name]['profit'])
  59. profits.append(max(profit,0.00001))
  60. if len(params_pool) > 0:
  61. random_params = params_pool[random.choices(list(params_pool.keys()),weights=profits,k=1)[0]]
  62. # 切换参数
  63. params.pair = random_params['pair']
  64. params.refpair = str(random_params['refpair'])
  65. params.refexchange = str(random_params['refexchange'])
  66. params.open = random_params['open'] if 'open' in random_params else "0.003"
  67. params.close = random_params['close'] if 'close' in random_params else "0.0001"
  68. leverrate = random_params['leverrate'] if 'leverrate' in random_params else "1.0"
  69. if float(leverrate) == 0.5:
  70. # 随机分配的参数
  71. params.leverrate = leverrate
  72. elif float(leverrate) == 2.0:
  73. # 来自盈利组的参数
  74. min_profit = min(profits)
  75. max_profit = max(profits)
  76. if min_profit == max_profit:
  77. leverrate = 2.0
  78. else:
  79. leverrate = round(0.5 + 1.5*(random_params['profit'] - min_profit)/(max_profit-min_profit),1)
  80. params.leverrate = str(leverrate)
  81. else:
  82. # 其他参数
  83. params.leverrate = leverrate
  84. with open(fname, 'w+') as fp:
  85. toml.dump(params.__dict__, fp)
  86. if exe:
  87. quant = subprocess.Popen(['./final_quant', '-c', fname, '-log_file', log_file, '-num', pidnum, '-child'])
  88. else:
  89. quant = subprocess.Popen(['python3', 'quant.py', '-c', fname, '-log_file', log_file, '-num', pidnum, '-child'])
  90. wait_time = random.randint(utils.CHILD_RUN_SECOND*0.8,utils.CHILD_RUN_SECOND)
  91. check_num = 10000
  92. wait_time_per_loop = wait_time / check_num
  93. for _ in range(check_num):
  94. time.sleep(wait_time_per_loop)
  95. if quant.poll() is not None:
  96. break
  97. quant.terminate()
  98. # 休息n秒进入下一轮
  99. time.sleep(random.randint(10,15))