Exemple #1
0
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)
Exemple #2
0
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('行情服务结束。')
Exemple #3
0
def wait_trade_time_end():
    # 在交易时间就等待交易时间结束
    while comm.is_trade_time():
        time.sleep(10)