Administrator
2023-02-16 92cb2dd75ea37b64b174f42ddd0b5b17d6a4634a
l2/transaction_progress.py
@@ -10,7 +10,7 @@
from db import redis_manager
import tool
import l2.l2_data_util
from log import logger_l2_trade_buy_queue
from log import logger_l2_trade_buy_queue, logger_l2_trade_buy_progress
class TradeBuyQueue:
@@ -55,7 +55,9 @@
    def __get_latest_not_limit_up_time(self, code):
        key = "latest_not_limit_up_time-{}".format(code)
        self.__getRedis().get(key)
        if not constant.TEST:
            return self.__getRedis().get(key)
        return None
    # 保存数据,返回保存数据的条数
    def save(self, code, limit_up_price, buy_1_price, buy_1_time, queues):
@@ -80,21 +82,17 @@
        return num_list
    # 保存成交索引
    def compute_traded_index(self, code, buy1_price, buyQueueBig):
    def compute_traded_index(self, code, buy1_price, buyQueueBig, exec_time=None):
        total_datas = l2.l2_data_util.local_today_datas.get(code)
        today_num_operate_map = l2.l2_data_util.local_today_num_operate_map.get(code)
        index = None
        for i in range(0, len(buyQueueBig)):
            buyQueueBigTemp = buyQueueBig[i:]
            if i > 0 and len(buyQueueBigTemp) < 2:
                # 已经执行过一次,且数据量小于2条就终止计算
                break
        if True:
            buyQueueBigTemp = buyQueueBig
            last_index, is_default = self.get_traded_index(code)
            c_last_index = 0
            if not is_default and last_index is not None:
                c_last_index = last_index
            latest_not_limit_up_time = self.__get_latest_not_limit_up_time(code)
            # 如果是3个/4个数据找不到就调整顺序
            fbuyQueueBigTempList = []
            if 3 <= len(buyQueueBigTemp) <= 4:
@@ -105,33 +103,41 @@
            fbuyQueueBigTempList.insert(0, buyQueueBigTemp)
            for temp in fbuyQueueBigTempList:
                try:
                    index = l2.l2_data_util.L2TradeQueueUtils.find_traded_progress_index(buy1_price, total_datas,
                    index = l2.l2_data_util.L2TradeQueueUtils.find_traded_progress_index(code, buy1_price, total_datas,
                                                                                         today_num_operate_map,
                                                                                         temp,
                                                                                         c_last_index,
                                                                                         self.__get_latest_not_limit_up_time(
                                                                                             code))
                                                                                         latest_not_limit_up_time
                                                                                         )
                    if index is not None:
                        # 判断位置是否大于执行位2s
                        if exec_time and tool.trade_time_sub(total_datas[index]["val"]["time"], exec_time) > 5:
                            # 位置是否大于执行位2s表示无效
                            index = None
                            continue
                        # 只能削减一半以下才能终止
                        if len(temp) * 2 < len(buyQueueBig):
                            index = None
                        break
                except:
                    pass
            if index is not None:
                break
        if index is not None:
            logger_l2_trade_buy_queue.info(f"确定交易进度:code-{code} index-{index}")
                logger_l2_trade_buy_progress.info(
                    f"确定交易进度成功:code-{code}  index-{index} queues:{buyQueueBig}  last_index-{c_last_index} latest_not_limit_up_time-{latest_not_limit_up_time}  exec_time-{exec_time}")
            # 保存成交进度
            # self.__save_buy_progress_index(code, index, False)
            return index
            else:
                logger_l2_trade_buy_progress.warning(
                    f"确定交易进度失败:code-{code} queues:{buyQueueBig}  last_index-{c_last_index} latest_not_limit_up_time-{latest_not_limit_up_time} exec_time-{exec_time}")
        return index
    # 获取成交进度索引
    def get_traded_index(self, code):
        index, is_default = self.__get_buy_progress_index(code)
        return index, is_default
    def set_default_traded_index(self, code, index):
        self.__save_buy_progress_index(code, index, True)
    def set_traded_index(self, code, index):
        self.__save_buy_progress_index(code, index, False)