From 01990eda7147f99814f9b7babfaad76e835ab0b3 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 10 一月 2025 13:50:40 +0800
Subject: [PATCH] 近5日成交额过小改变参考量

---
 l2/l2_data_manager_new.py |  233 ++--------------------------------------------------------
 1 files changed, 8 insertions(+), 225 deletions(-)

diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py
index d4c69fa..145346a 100644
--- a/l2/l2_data_manager_new.py
+++ b/l2/l2_data_manager_new.py
@@ -489,7 +489,8 @@
                             if not constant.IS_NEW_VERSION_PLACE_ORDER:
                                 try:
                                     cls.__re_compute_threading_pool.submit(
-                                        cls.__recompute_real_order_index, code, place_order_index, order_info, compute_type)
+                                        cls.__recompute_real_order_index, code, place_order_index, order_info,
+                                        compute_type)
                                 except:
                                     pass
                             async_log_util.info(logger_l2_process, f"code:{code} 鑾峰彇鍒颁笅鍗曠湡瀹炰綅缃細{place_order_index}")
@@ -716,10 +717,10 @@
                 b_need_cancel, b_cancel_data, extra_msg = RDCancelBigNumComputer().need_cancel(code, start_index,
                                                                                                end_index)
                 if b_need_cancel and b_cancel_data:
-                    big_order_info =  radical_buy_data_manager.get_total_deal_big_order_info(code,
-                                                                           gpcode_manager.get_limit_up_price_as_num(
-                                                                               code))
-                    if big_order_info[0]>0:
+                    big_order_info = radical_buy_data_manager.get_total_deal_big_order_info(code,
+                                                                                            gpcode_manager.get_limit_up_price_as_num(
+                                                                                                code))
+                    if big_order_info[0] > 0:
                         return b_cancel_data, f"RD鎾�({extra_msg})", trade_constant.CANCEL_TYPE_RD
             except Exception as e:
                 async_log_util.error(logger_l2_error,
@@ -1040,225 +1041,6 @@
                 is_limit_up_buy = False
         return is_limit_up_buy
 
-    @classmethod
-    def __is_big_order_deal_enough(cls, code):
-        """
-        澶у崟鎴愪氦鏄惁瓒冲
-        @param code:
-        @param volume_rate:
-        @return:
-        """
-        limit_up_price = gpcode_manager.get_limit_up_price_as_num(code)
-        refer_volume = code_volumn_manager.CodeVolumeManager().get_max_volume_in_5days(code)
-        if refer_volume is None:
-            refer_volume = 0
-
-        money_y = int(refer_volume * limit_up_price / 1e8)
-        money_y = min(money_y, 50)
-        money_y = max(money_y, 5)
-        # 璁$畻澶у崟鍙傝�冩暟閲�
-        threshold_count = int(round(0.4 * money_y)) * 4
-        threshold_money = threshold_count * 299 * 10000
-        volume_rate_info = cls.volume_rate_info.get(code)
-
-        deal_big_order_money = BigOrderDealManager().get_total_buy_money(code)
-        if deal_big_order_money >= threshold_money:
-            return True, f"閲忔瘮-{volume_rate_info}, 鎬诲ぇ鍗曟垚浜ら噾棰�({deal_big_order_money})>={threshold_money}"
-        else:
-            return False, f"閲忔瘮-{volume_rate_info}, 鎬诲ぇ鍗曟垚浜ら噾棰�({deal_big_order_money})<{threshold_money}"
-
-    @classmethod
-    def __can_buy_first(cls, code):
-        """
-        鏄惁鍙互涓嬪崟
-        @param code:
-        @return:(鏄惁鍙互涓嬪崟, 鏄惁娓呯悊淇″彿鏁版嵁, 涓嶈兘涓嬪崟娑堟伅, 鏄惁绠楁湁鏁堟墽琛�)
-        """
-
-        pre_result = cls.__is_pre_can_buy(code)
-        if not pre_result[0]:
-            return pre_result[0], pre_result[1], pre_result[2], pre_result[3]
-
-        now_time_int = int(tool.get_now_time_str().replace(":", ""))
-        if 130100 >= now_time_int >= 112900 or now_time_int < 93100:
-            if now_time_int < 93100:
-                # 鍒ゆ柇杩�120澶╂槸鍚︽湁娑ㄥ仠
-                k_format = code_nature_analyse.CodeNatureRecordManager().get_k_format_cache(code)
-                if k_format and len(k_format) >= 12 and not k_format[11]:
-                    return False, True, f"09:31:00涔嬪墠涓嬪崟锛�90涓氦鏄撴棩鏃犳定鍋�", True
-
-                # 鍒ゆ柇鎴愪氦鐨勫ぇ鍗曟暟閲�
-                data_list = BigOrderDealManager().get_total_buy_money_list(code)
-                bigger_money = 2990000
-                fdatas = []
-                for d in data_list:
-                    if d < bigger_money:
-                        continue
-                    fdatas.append(d)
-                thresh_count = 3 if tool.is_sh_code(code) else 1
-                if len(fdatas) < thresh_count:
-                    return False, True, f"09:31:00涔嬪墠涓嬪崟锛屾垚浜ゅぇ鍗曟暟閲忥紙{len(fdatas)}锛変笉瓒硔thresh_count}涓�", True
-                else:
-                    # 鍒ゆ柇鏁版嵁鏄惁鍗�
-                    total_datas = local_today_datas.get(code)
-                    if tool.trade_time_sub_with_ms(tool.get_now_time_with_ms_str(),
-                                                   L2DataUtil.get_time_with_ms(total_datas[-1]["val"])) > 500:
-                        return False, True, f"09:31:00涔嬪墠涓嬪崟锛孡2鏁版嵁鏃堕棿鐩稿樊500ms浠ヤ笂", True
-            else:
-                return False, True, f"09:31:00涔嬪墠锛�11:29:00-13:01:00涓嶈兘浜ゆ槗", True
-
-        limit_up_price = gpcode_manager.get_limit_up_price_as_num(code)
-
-        if constant.MIN_CODE_PRICE < limit_up_price < constant.MAX_CODE_PRICE:
-            # 婊¤冻鏉′欢鐨勫崟浠�
-            pass
-        elif limit_up_price > constant.MAX_CODE_PRICE:
-            # HighIncreaseCodeManager().add_code(code)
-            # 灏忓競鍊奸珮鑲′环鍙拱
-            zyltgb = global_util.zyltgb_map.get(code)
-            if zyltgb > 25e8 or limit_up_price > constant.MAX_SUBSCRIPT_CODE_PRICE:
-                return False, True, f"鑲′环澶т簬{constant.MAX_CODE_PRICE}鍧�/灏忎簬{constant.MIN_CODE_PRICE}鍧�", True
-        else:
-            return False, True, f"鑲′环灏忎簬{constant.MIN_CODE_PRICE}鍧�", True
-
-        # place_order_count = cls.__PlaceOrderCountManager.get_place_order_count(code)
-        # if place_order_count and place_order_count >= 10:
-        #     l2_trade_util.forbidden_trade(code, msg="褰撴棩涓嬪崟娆℃暟宸茶揪10娆�")
-        #     return False, True, f"褰撴棩涓嬪崟娆℃暟宸茶揪10娆�"
-
-        # ---------鍧囦环绾︽潫-------------
-        average_rate = cls.__Buy1PriceManager.get_average_rate(code)
-        if average_rate and average_rate <= 0.01 and tool.trade_time_sub(tool.get_now_time_str(), "10:30:00") >= 0:
-            return False, True, f"鍧囦环娑ㄥ箙({average_rate})灏忎簬1%", True
-
-        total_data = local_today_datas.get(code)
-
-        # 9:32涔嬪墠涓婅瘉寮�1鐨勭エ涓嶄拱
-        if tool.is_sh_code(code) and int(total_data[-1]["val"]["time"].replace(":", "")) <= int("093100"):
-            # 鑾峰彇娑ㄥ仠鏃堕棿
-            limit_up_data = kpl_data_manager.KPLLimitUpDataRecordManager.record_code_dict.get(code)
-            if limit_up_data:
-                limit_up_time = tool.to_time_str(limit_up_data[2])
-                if int(limit_up_time.replace(":", "")) < int("093000"):
-                    return False, True, f"涓婅瘉寮�涓�09:32涔嬪墠涓嶄笅鍗�", True
-
-        # ------------鎸傚崟鏃堕棿绾︽潫----------
-        order_begin_pos = cls.__get_order_begin_pos(
-            code)
-        if not trade_result_manager.can_place_order_for_cancel_time(code, total_data[
-            order_begin_pos.buy_exec_index]) and not gpcode_manager.GreenListCodeManager().is_in_cache(code):
-            return False, True, f"璺濈涓婃鎸傚崟灏忎簬鏃堕棿闄愬埗", True
-
-        # ------------鏉垮潡绾︽潫-------------
-        if not cls.__WantBuyCodesManager.is_in_cache(code):
-            # 鎯充拱鍗曟棤鏉垮潡绾︽潫
-            block_buy_result = buy_strategy_util.is_block_can_buy(code, cls.__get_can_buy_block(code))
-            if not block_buy_result[0]:
-                return block_buy_result[0], block_buy_result[1], block_buy_result[2], True
-
-        if constant.L2_SOURCE_TYPE == constant.L2_SOURCE_TYPE_HUAXIN:
-            # ---------------------鍒ゆ柇鏄惁涓烘澘涓婃斁閲�----------------------
-            trade_price = current_price_process_manager.get_trade_price(code)
-            if trade_price is None:
-                return False, True, f"灏氭湭鑾峰彇鍒板綋鍓嶆垚浜や环", True
-            # 鍒ゆ柇鏄惁涓烘澘涓婃斁閲忥細
-            # 1.褰撳墠鎴愪氦浠蜂负娑ㄥ仠浠�
-            # 2.璺濈鏈�杩戠殑闈炴澘涓婃垚浜ょ殑鏃堕棿澶т簬涓�涓槇鍊�
-            if abs(limit_up_price - float(trade_price)) < 0.001:
-                is_limit_up_buy = cls.__is_at_limit_up_buy(code, order_begin_pos.buy_exec_index)
-                if is_limit_up_buy:
-                    # 鏉夸笂涔颁笖闈炲姞缁�
-                    # 鑾峰彇鏈�杩戠殑闈炴定鍋滀环鎴愪氦鏃堕棿
-                    not_limit_up_trade_time_with_ms = current_price_process_manager.get_trade_not_limit_up_time_with_ms(
-                        code)
-                    # 鍒ゆ柇鎴愪氦杩涘害鍒板綋鍓嶆暟鎹殑绗旀暟锛屽鏋滃皯浜�10绗斾笖杩樻湁鏈垚浜ょ殑澶у崟锛�>=299锛夊氨鍙互涓嬪崟
-                    trade_index, is_default = cls.__TradeBuyQueue.get_traded_index(code)
-                    if trade_index is None:
-                        trade_index = 0
-                    can_place_order, msg = buy_strategy_util.is_near_by_trade_index(code, trade_index)
-                    if not can_place_order:
-                        try:
-                            # 涓嶈兘涓嬪崟锛屽垽鏂皬缇ゆ挙鏄惁鍙互涓�
-                            if buy_strategy_util.is_has_small_batch_cancel(code, trade_index,
-                                                                           order_begin_pos.buy_single_index):
-                                # 鍒ゆ柇鎾ゅ崟姣斾緥鏄惁瓒冲
-                                cancel_rate_reieved_info = buy_strategy_util.is_cancel_rate_reieved(code, 0.69,
-                                                                                                    trade_index,
-                                                                                                    order_begin_pos.buy_single_index)
-                                if not cancel_rate_reieved_info[0]:
-                                    return False, True, f"鏉夸笂鏀鹃噺璺濈杩�({not_limit_up_trade_time_with_ms})锛屾湁灏忕兢鎾�, 鏁翠綋鎾ゅ崟姣斾緥涓嶈冻锛坽trade_index}-{order_begin_pos.buy_single_index}锛墈cancel_rate_reieved_info[1]}", False
-                            else:
-                                return False, True, f"鏉夸笂鏀鹃噺璺濈杩�({not_limit_up_trade_time_with_ms})锛屾病鏈夊皬缇ゆ挙锛坽trade_index}-{order_begin_pos.buy_single_index}锛�", False
-                        except Exception as e:
-                            l2_log.info(code, logger_l2_error, f"鏉夸笂鏀鹃噺({not_limit_up_trade_time_with_ms})涓嶈冻寮傚父锛歿str(e)}")
-                            logger_l2_error.exception(e)
-                            return False, True, f"鏉夸笂鏀鹃噺璁$畻寮傚父", False
-
-                    # -------鏄惁璺濈鎴愪氦杩涘害浣嶅お杩�--------
-                    buy1_money = code_price_manager.Buy1PriceManager().get_latest_buy1_money(code)
-                    buy1_price = code_price_manager.Buy1PriceManager().get_buy1_price(code)
-                    if buy1_price and abs(limit_up_price - buy1_price) > 0.0001:
-                        # 涔�1鏈定鍋�
-                        buy1_money = 0
-                    if not buy1_money:
-                        buy1_money = 1
-                    if buy_strategy_util.is_far_away_from_trade_index(code, trade_index, buy1_money):
-                        return False, True, f"璺濈鎴愪氦杩涘害浣嶅お杩滐細鎴愪氦杩涘害-{trade_index} 涔�1-{buy1_money}", False
-
-            # ------------------涓婅瘉涓嬪崟闇�瑕佹湁鎴愪氦澶у崟锛堝寘鍚富鍔ㄤ拱涓庤鍔ㄤ拱锛夋垨鑰呮寕涔扮殑澶у崟-----------------
-            if tool.is_sh_code(code):
-                deal_big_order_count = BigOrderDealManager().get_total_buy_count(code)
-                if deal_big_order_count < 1:
-                    # 缁熻鎸備拱澶у崟
-                    trade_index, is_default = cls.__TradeBuyQueue.get_traded_index(code)
-                    if trade_index is None:
-                        trade_index = 0
-                    limit_up_price = gpcode_manager.get_limit_up_price_as_num(code)
-                    # 浠庢垚浜よ繘搴︿綅鍒版埅鑷充綅缃绠楀ぇ鍗�
-                    min_money = l2_data_util.get_big_money_val(limit_up_price, tool.is_ge_code(code))
-                    left_count, left_money = cancel_buy_strategy.L2DataComputeUtil.compute_left_buy_order(code,
-                                                                                                          trade_index,
-                                                                                                          total_data[
-                                                                                                              -1][
-                                                                                                              "index"],
-                                                                                                          limit_up_price,
-                                                                                                          min_money=min_money)
-                    if left_count < 1:
-                        return False, False, f"娌℃湁宸叉寕鎴栬�呮垚浜ょ殑澶у崟", False
-            if not cls.__WantBuyCodesManager.is_in_cache(code):
-                # 鎯充拱鍗曚笉闇�瑕佸ぇ鍗曠害鏉�
-                big_deal_order_info = cls.__is_big_order_deal_enough(code)
-                if not big_deal_order_info[0]:
-                    return False, False, big_deal_order_info[1], False
-
-            place_order_count = trade_data_manager.PlaceOrderCountManager().get_place_order_count(code)
-            # ------------------绗竴鍜岀浜屾涓嬪崟閮藉繀椤昏鏈夎嚦灏戜竴绗旀湭鎴愪氦鐨勫ぇ鍗�--------------------------
-            # 璁$畻澶у崟
-            total_datas = local_today_datas.get(code)
-            if place_order_count < 2:
-                trade_index, is_default = transaction_progress.TradeBuyQueue().get_traded_index(code)
-                if trade_index is None:
-                    trade_index = 0
-                min_money = l2_data_util.get_big_money_val(limit_up_price, tool.is_ge_code(code))
-                left_count, left_num = L2DataComputeUtil.compute_left_buy_order(code, trade_index,
-                                                                                total_datas[-1]["index"],
-                                                                                limit_up_price, min_money)
-                if left_count < 1:
-                    return False, False, f"绗瑊place_order_count + 1}娆′笅鍗曟棤寰呮垚浜ょ殑澶у崟", False
-
-            # -------鍒ゆ柇鏄惁鏄噺鍖栦笅鍗曪紝濡傛灉鏄氨涓嶈窡鍒颁笅鍗�--------
-            # 閲嶈锛氶噺鍖栦笅鍗曚細澧炲姞涓嬪崟娆℃暟锛屾澘鍧椾笅鍗曚腑鏈変笅鍗曟鏁扮殑浣跨敤锛屾墍浠ユ澘鍧楅渶瑕佸湪閲忓寲鍒ゆ柇涔嬪墠
-            # 鍙湁鏉垮潡婊¤冻涓嬪崟涔嬪悗鎵嶈兘鍒ゆ柇鍏跺畠鏉′欢
-            range_indexes = cls.__processing_data_indexes.get(code)
-            if range_indexes:
-                # 鏄惁鏄噺鍖栧崟
-                is_quantization_result = buy_strategy_util.is_quantization(code, range_indexes[0], range_indexes[1])
-                if is_quantization_result[0] and not gpcode_manager.GreenListCodeManager().is_in_cache(code):
-                    # 閲忓寲鍗曚笖娌℃湁鍔犵豢
-                    cls.__next_buy_time_dict[code] = is_quantization_result[1]
-                    return False, True, is_quantization_result[2], True
-        return True, False, "婊¤冻涓嬪崟鏉′欢", True
-
     # 鑾峰彇鍙互涔扮殑鏉垮潡
     @classmethod
     def __get_can_buy_block(cls, code):
@@ -1277,7 +1059,8 @@
                                                          kpl_data_manager.KPLLimitUpDataRecordManager.total_datas,
                                                          latest_current_limit_up_records,
                                                          block_info.get_before_blocks_dict(),
-                                                         kpl_data_manager.KPLLimitUpDataRecordManager.get_current_limit_up_reason_codes_dict(), codes_delegate, codes_success)
+                                                         kpl_data_manager.KPLLimitUpDataRecordManager.get_current_limit_up_reason_codes_dict(),
+                                                         codes_delegate, codes_success)
             can_buy_result = CodePlateKeyBuyManager.can_buy(code)
         return can_buy_result
 

--
Gitblit v1.8.0