Administrator
2025-03-12 b37fe91f5eed9ac691a4ee9acaec506af1267506
l2/l2_transaction_data_processor.py
@@ -6,7 +6,7 @@
from cancel_strategy.s_l_h_cancel_strategy import LCancelBigNumComputer, LCancelRateManager
from cancel_strategy.s_l_h_cancel_strategy import SCancelBigNumComputer
from code_attribute import gpcode_manager
from l2 import l2_data_util, l2_data_manager, transaction_progress
from l2 import l2_data_util, l2_data_manager, transaction_progress, l2_log
from l2.cancel_buy_strategy import FCancelBigNumComputer, \
    NewGCancelBigNumComputer, \
    NBCancelBigNumComputer
@@ -21,7 +21,8 @@
from trade import current_price_process_manager, trade_constant
import concurrent.futures
from trade.radical_buy_data_manager import RedicalBuyDataManager
from trade.buy_radical import radical_buy_strategy
from trade.buy_radical.radical_buy_data_manager import RadicalBuyDataManager, EveryLimitupBigDealOrderManager
from utils import tool
@@ -51,23 +52,32 @@
        @param datas:
        @return:
        """
        limit_up_price = round(float(gpcode_manager.get_limit_up_price(code)), 2)
        limit_up_price = gpcode_manager.get_limit_up_price_as_num(code)
        buy_datas, bigger_buy_datas = HuaXinBuyOrderManager.statistic_big_buy_data(code, datas, limit_up_price)
        if buy_datas:
            BigOrderDealManager().add_buy_datas(code, buy_datas)
            if order_begin_pos.mode == OrderBeginPosInfo.MODE_RADICAL:
                RedicalBuyDataManager.big_order_deal(code)
            active_big_buy_orders = []
            if buy_datas:
                for x in buy_datas:
                    if x[0] > x[6]:
                        # (买单号, 成交金额, 最后成交时间)
                        active_big_buy_orders.append((x[0], x[2], x[4]))
            EveryLimitupBigDealOrderManager.add_big_buy_order_deal(code, active_big_buy_orders)
        try:
            is_placed_order = l2_data_manager.TradePointManager.is_placed_order(order_begin_pos)
            if is_placed_order and bigger_buy_datas:
                # 有大于50w的大单成交
                buyno_map = l2_data_util.local_today_buyno_map.get(code)
                if buyno_map:
                    for buy_data in bigger_buy_datas:
                        order_no = f"{buy_data[0]}"
                        if order_no in buyno_map:
                            LCancelBigNumComputer().add_deal_index(code, buyno_map[order_no]["index"],
                                                                   order_begin_pos.buy_single_index)
            if is_placed_order:
                if order_begin_pos and order_begin_pos.mode == OrderBeginPosInfo.MODE_RADICAL:
                    RadicalBuyDataManager.big_order_deal(code)
                if bigger_buy_datas:
                    # 有大于50w的大单成交
                    buyno_map = l2_data_util.local_today_buyno_map.get(code)
                    if buyno_map:
                        for buy_data in bigger_buy_datas:
                            order_no = f"{buy_data[0]}"
                            if order_no in buyno_map:
                                LCancelBigNumComputer().add_deal_index(code, buyno_map[order_no]["index"],
                                                                       order_begin_pos.buy_single_index)
        except Exception as e:
            logger_debug.exception(e)
@@ -87,8 +97,13 @@
        # 设置成交价
        try:
            current_price_process_manager.set_trade_price(code, datas[-1][1])
            if limit_up_price > datas[-1][1]:
                # 没有涨停
                EveryLimitupBigDealOrderManager.open_limit_up(code, f"最新成交价:{datas[-1][1]}")
                radical_buy_strategy.clear_data(code)
        except:
            pass
        total_datas = l2_data_util.local_today_datas.get(code)
        use_time_list = []
        try:
@@ -99,6 +114,19 @@
            order_begin_pos = l2_data_manager.TradePointManager().get_buy_compute_start_data_cache(code)
            # 是否已经下单
            is_placed_order = l2_data_manager.TradePointManager.is_placed_order(order_begin_pos)
            _start_time = time.time()
            L2LimitUpSellDataManager.set_deal_datas(code, datas)
            use_time_list.append(("统计涨停卖成交", time.time() - _start_time))
            _start_time = time.time()
            #  大单统计
            # cls.__statistic_thread_pool.submit(cls.statistic_big_order_infos, code, datas, order_begin_pos)
            try:
                cls.statistic_big_order_infos(code, datas, order_begin_pos)
            except Exception as e:
                async_log_util.error(hx_logger_l2_debug, f"统计大单出错:{str(e)}")
            use_time_list.append(("统计大单数据", time.time() - _start_time))
            _start_time = time.time()
            big_sell_order_info = None
            try:
@@ -123,13 +151,17 @@
                # 统计卖单
                big_sell_order_info = HuaXinSellOrderStatisticManager.add_transaction_datas(code, datas, limit_up_price)
                use_time_list.append(("处理卖单成交数据", time.time() - _start_time))
                _start_time = time.time()
                use_time_list.append(("处理卖单成交数据", _start_time - __start_time))
                if is_placed_order:
                    need_cancel, cancel_msg = SCancelBigNumComputer().set_big_sell_order_info_for_cancel(code,
                                                                                                         big_sell_order_info,
                                                                                                         order_begin_pos)
                    LCancelBigNumComputer().set_big_sell_order_info(code, big_sell_order_info)
                    # need_cancel, cancel_msg = SCancelBigNumComputer().set_big_sell_order_info_for_cancel(code,
                    #                                                                                      big_sell_order_info,
                    #                                                                                      order_begin_pos)
                    need_cancel, cancel_msg = False, ""
                    cancel_type = None
                    if need_cancel:
                        cancel_msg = f"S撤:{cancel_msg}"
@@ -137,11 +169,11 @@
                    if not need_cancel:
                        need_cancel, cancel_msg = FCancelBigNumComputer().need_cancel_for_p(code,
                                                                                            order_begin_pos)
                        cancel_type = trade_constant.CANCEL_TYPE_F
                        cancel_type = trade_constant.CANCEL_TYPE_P
                    # 判断时间是否与本地时间相差5s以上
                    if tool.trade_time_sub(tool.get_now_time_str(), l2_huaxin_util.convert_time(datas[-1][3])) > 10:
                        now_seconds = int(tool.get_now_time_str().replace(":", ""))
                        if now_seconds < int("093200"):  # or int("130000") <= now_seconds < int("130200"):
                        if now_seconds < int("093100"):  # or int("130000") <= now_seconds < int("130200"):
                            need_cancel, cancel_msg = True, f"成交时间与本地时间相差10S以上,{l2_huaxin_util.convert_time(datas[-1][3])}"
                            cancel_type = trade_constant.CANCEL_TYPE_L2_DELAY
                    if need_cancel:
@@ -156,11 +188,7 @@
            except Exception as e:
                async_log_util.error(logger_debug, f"卖单统计异常:{big_sell_order_info}")
                logger_debug.exception(e)
            _start_time = time.time()
            L2LimitUpSellDataManager.set_deal_datas(code, datas)
            cls.__statistic_thread_pool.submit(cls.statistic_big_order_infos, code, datas, order_begin_pos)
            use_time_list.append(("统计买单数据", time.time() - _start_time))
            _start_time = time.time()
            # if big_money_count > 0:
            #     LCancelRateManager.compute_big_num_deal_rate(code)
@@ -195,7 +223,8 @@
                        try:
                            cancel_result = FCancelBigNumComputer().need_cancel_for_w(code)
                            if cancel_result[0]:
                                L2TradeDataProcessor.cancel_buy(code, f"W撤:{cancel_result[1]}", cancel_type=trade_constant.CANCEL_TYPE_W)
                                L2TradeDataProcessor.cancel_buy(code, f"W撤:{cancel_result[1]}",
                                                                cancel_type=trade_constant.CANCEL_TYPE_W)
                        except:
                            pass
@@ -216,5 +245,5 @@
        finally:
            use_time = int((time.time() - __start_time) * 1000)
            if use_time > 5:
                async_log_util.info(hx_logger_l2_upload,
                                    f"{code}处理成交用时:{use_time} 数据数量:{len(datas)}  详情:{use_time_list}")
                l2_log.info(code, hx_logger_l2_upload,
                            f"{code}处理成交用时:{use_time} 数据数量:{len(datas)}  详情:{use_time_list}")