seele.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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 'dummy_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. params = utils.get_params(fname)
  48. params_pool = utils._get_params("http://wwww.khods.com:8888/get_dummy_params", params.proxy, {"exchange":params.exchange})
  49. # 选出本交易所的数据
  50. params_temp = []
  51. for p_name in params_pool:
  52. if params.exchange in p_name:
  53. profit = float(params_pool[p_name]['profit'])
  54. for _ in range(1+int(profit//0.01)):
  55. params_temp.append(params_pool[p_name])
  56. if len(params_temp) > 0:
  57. max_params = random.choice(params_temp)
  58. # 切换参数
  59. params.pair = max_params['pair']
  60. params.refpair = str(max_params['refpair'])
  61. params.refexchange = str(max_params['refexchange'])
  62. params.open = max_params['open'] if 'open' in max_params else "0.003"
  63. params.close = max_params['close'] if 'close' in max_params else "0.0001"
  64. params.leverrate = max_params['leverrate'] if 'leverrate' in max_params else "1.0"
  65. with open(fname, 'w+') as fp:
  66. toml.dump(params.__dict__, fp)
  67. if exe:
  68. quant = subprocess.Popen(['./dummy_quant', '-c', fname, '-log_file', log_file, '-num', pidnum, '-child'])
  69. else:
  70. quant = subprocess.Popen(['python3', 'dummy.py', '-c', fname, '-log_file', log_file, '-num', pidnum, '-child'])
  71. wait_time = random.randint(utils.DUMMY_RUN_SECOND+60,utils.DUMMY_RUN_SECOND+120)
  72. check_num = 10000
  73. wait_time_per_loop = wait_time / check_num
  74. for _ in range(check_num):
  75. time.sleep(wait_time_per_loop)
  76. if quant.poll() is not None:
  77. break
  78. quant.terminate()
  79. # 休息n秒进入下一轮
  80. time.sleep(random.randint(10,15))