def start_loop(): # 更新时间 hour = 18 rdinfo = redisRW.redisrw(redisRW.db_info) # 上次入库时间 update_time = rdinfo.read_dec_datetime('update') if update_time is not None: last_up_date = update_time['datetime'] now_date = datetime.datetime.now() diff_days = (now_date.date() - last_up_date.date()).days if diff_days > 1 or (diff_days == 1 and last_up_date.hour < hour): last_up_date = now_date update(rdinfo, last_up_date) else: last_up_date = datetime.datetime.now() update(rdinfo, last_up_date) while True: now_date = datetime.datetime.now() if now_date.hour >= hour: # 只有在今天指定时间更新才有效 if last_up_date.date() < now_date.date( ) or last_up_date.hour < hour: last_up_date = now_date update(rdinfo, last_up_date) if comm.is_trade_time(): global commobj print('登陆交易终端', rpcTrade.login()) # 清空数据 redisRW.redisrw(redisRW.db_backtest_chicang).del_db() redisRW.redisrw(redisRW.db_sell).del_db() runQuotation.start_quotation_process(commobj) print('结束交易终端', rpcTrade.kill()) time.sleep(5)
def start_quotation_process(commobj, back_test_date: datetime.datetime = None, process_count=3): # 交易时间不允许回放行情 if commobj.is_backtest and comm.is_trade_time(): return rdxg = redisRW.redisrw(redisRW.db_xg) rdsell = redisRW.redisrw(redisRW.db_sell) rdsell.del_db() # 读取选股数据 xg_data_list = rdxg.read_all_dec() if len(xg_data_list) == 0: print('没有选股数据') wait_trade_time_end() return # 清空数据 redisRW.redisrw(redisRW.db_realtime_tick).del_db() rdmainquotation = redisRW.redisrw(redisRW.db_mainquotaion) rdmainquotation.del_db() # 数据分块 bk = math.ceil(len(xg_data_list) / process_count) bk_data_list = [] temp = [] p_list = [] for i in range(len(xg_data_list)): if i > 0 and i % bk == 0: bk_data_list.append(temp) temp = [] temp.append(xg_data_list[i]) if len(temp) > 0: bk_data_list.append(temp) if back_test_date is None: tdx = dataTdx.DataTdx() # 可用服务器 addrs_list_info = tdx.get_sort_address_info() addr_ky_count = len(addrs_list_info) if addr_ky_count == 0: print('没有可用服务器。') wait_trade_time_end() return print('可用服务器', addr_ky_count, '最大延时', addrs_list_info[addr_ky_count - 1][3], 'ms') # 启动通达信实时行情进程 for b in bk_data_list: p = Process(target=c_ths_tdx, args=(commobj, addrs_list_info, b)) p_list.append(p) p.start() else: # 启动回测行情模拟进程 for b in bk_data_list: p = Process(target=c_ths_back_test, args=(commobj, back_test_date, b)) p_list.append(p) p.start() print('行情服务已启动,选股数量', len(xg_data_list)) for p in p_list: p.join() print('行情服务结束。')
def wait_trade_time_end(): # 在交易时间就等待交易时间结束 while comm.is_trade_time(): time.sleep(10)