From c131be702b0583d3374f15e61885457ff391e0d7 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 11 十月 2024 15:13:47 +0800
Subject: [PATCH] bug修复

---
 third_data/code_plate_key_manager.py |  114 ++++++++++++++++++++++++--------------------------------
 1 files changed, 49 insertions(+), 65 deletions(-)

diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py
index 5521fa7..aeba8a5 100644
--- a/third_data/code_plate_key_manager.py
+++ b/third_data/code_plate_key_manager.py
@@ -12,12 +12,11 @@
 from db.redis_manager_delegate import RedisUtils
 from third_data import kpl_block_util, kpl_api, kpl_util, kpl_data_constant, huaxin_l1_data_manager
 from settings.trade_setting import MarketSituationManager
-from third_data.history_k_data_manager import HistoryKDataManager
-from third_data.history_k_data_util import HistoryKDatasUtils
 from third_data.kpl_data_constant import LimitUpDataConstant
 from third_data.third_blocks_manager import BlockMapManager, CodeThirdBlocksManager
+from trade.order_statistic import DealAndDelegateWithBuyModeDataManager
 from trade.radical_buy_data_manager import RedicalBuyDataManager
-from utils import global_util, tool, buy_condition_util, init_data_util
+from utils import global_util, tool, buy_condition_util
 from log_module import log, async_log_util
 from db import redis_manager_delegate as redis_manager
 
@@ -344,31 +343,21 @@
     __KPLPlateForbiddenManager = KPLPlateForbiddenManager()
     __LimitUpCodesPlateKeyManager = LimitUpCodesPlateKeyManager()
     __KPLPlatManager = KPLPlatManager()
+    # 绮鹃�夊墠鍑�
+    __top_jx_blocks = set()
 
     @classmethod
-    def set_top_5_reasons(cls, datas):
-        temp_list = []
-        for d in datas:
-            cls.total_reason_dict[d[1]] = d
-        # 鎺掑簭
-        for i in range(0, len(datas)):
-            if datas[i][1] not in constant.KPL_INVALID_BLOCKS:
-                # 锛堝悕绉�,鍑�娴佸叆閲戦,鎺掑悕锛�
-                temp_list.append((datas[i][1], datas[i][3], len(temp_list)))
-                # 鍙幏鍙栧墠10涓�
-                if len(temp_list) > 10:
-                    break
-                if datas[i][3] < 3 * 10000 * 10000:
-                    break
+    def set_market_jingxuan_blocks(cls, datas):
+        blocks = set()
+        for data in datas:
+            if data[3] <= 0:
+                break
+            blocks.add(data[1])
+        cls.__top_jx_blocks = blocks
 
-        for temp in temp_list:
-            names = cls.__KPLPlatManager.get_same_plat_names_by_id(temp[0])
-            for name in names:
-                if name == temp[1]:
-                    continue
-                temp_list.append((name, temp[1], temp[2]))
-        cls.top_5_reason_list = temp_list
-        cls.__reset_top_5_dict()
+    @classmethod
+    def get_top_market_jingxuan_blocks(cls):
+        return cls.__top_jx_blocks
 
     @classmethod
     def set_top_5_industry(cls, datas):
@@ -400,35 +389,6 @@
     def get_can_buy_key_set(cls):
         temp_set = cls.top_5_key_dict.keys()
         return temp_set
-
-    # 閫氳繃鍏抽敭瀛楀垽鏂兘涔扮殑浠g爜鏁伴噺
-    @classmethod
-    def get_can_buy_codes_count(cls, code, key):
-        # 鍒ゆ柇琛屼笟娑ㄥ仠绁ㄦ暟閲忥紝闄ゅ紑鑷繁蹇呴』澶т簬1涓�
-        temp_codes = LimitUpCodesPlateKeyManager.total_key_codes_dict.get(key)
-        if temp_codes is None:
-            temp_codes = set()
-        else:
-            temp_codes = set(temp_codes)
-        temp_codes.discard(code)
-        if len(temp_codes) < 1:
-            # 鍚庢帓鎵嶈兘鎸傚崟
-            return 0, "韬綅涓嶄负鍚庢帓"
-
-        forbidden_plates = cls.__KPLPlateForbiddenManager.list_all_cache()
-        if key in forbidden_plates:
-            return 0, "涓嶄拱璇ユ澘鍧�"
-
-        # 10:30浠ュ墠鍙互鎸�2涓崟
-        if int(tool.get_now_time_str().replace(':', '')) < int("100000"):
-            return 2, "10:00浠ュ墠鍙互鎸�2涓崟"
-        # 10:30浠ュ悗
-        if key not in cls.top_5_key_dict:
-            return 0, "鍑�娴佸叆娌″湪鍓�5"
-        if cls.top_5_key_dict[key][1] > 3 * 10000 * 10000:
-            return 2, "鍑�娴佸叆鍦ㄥ墠5涓斿ぇ浜�3浜�"
-        else:
-            return 1, "鍑�娴佸叆鍦ㄥ墠5"
 
     @classmethod
     def is_in_top(cls, keys):
@@ -1340,7 +1300,7 @@
             return False, f"寮�1鏁伴噺锛歿count}锛岄潪寮�1棣栨澘韬綅涓嶅尮閰嶏細鍘嗗彶-{history_index + 1} 瀹炴椂-{current_index + 1}"
         if history_index == 1:
             # 褰撳墠浠g爜涓鸿��2锛岃鍒ゆ柇鑰佸ぇ鏄惁鍙拱
-            if RedicalBuyDataManager.can_buy(history_before_codes_info[0][0])[0]:
+            if RedicalBuyDataManager.can_buy(history_before_codes_info[0][0], DealAndDelegateWithBuyModeDataManager().get_deal_codes())[0]:
                 return False, f"寮�1鏁伴噺锛歿count}锛屽墠鎺掍唬鐮佸彲涔帮細{history_before_codes_info[0]}"
             return True, f"寮�1鏁伴噺锛歿count}锛屽墠鎺掍唬鐮佷笉鍙拱锛歿history_before_codes_info[0]}"
         return True, f"寮�1鏁伴噺锛歿count}锛屽巻鍙�-{history_index + 1} 瀹炴椂-{current_index + 1}"
@@ -1389,7 +1349,7 @@
         # 涓嶈绠楀墠2鐨勪唬鐮�
 
         exclude_codes = set()
-        for x in current_before_codes:
+        for x in current_before_codes_info:
             if x[1] < kpl_block_util.open_limit_up_time_range[1]:
                 exclude_codes.add(x[0])
         # 闄ゅ幓鍓嶄簩浠g爜涓庡紑1浠g爜涔嬪悗鏄惁涓洪鏉胯�佸ぇ锛氭墍鏈夊紑1鐨勮涓�1涓�
@@ -1411,7 +1371,7 @@
             # 棣栨澘鑰�2锛屽垽鏂墠闈㈢殑鑰佸ぇ鏄惁鏄睘浜庝笉鑳戒拱鐨勮寖鐣�
             pre_code = history_before_codes_info[0][0]
             # pre_code涓嶈兘涔帮紝鎵嶈兘涔�
-            if RedicalBuyDataManager.can_buy(pre_code)[0]:
+            if RedicalBuyDataManager.can_buy(pre_code, DealAndDelegateWithBuyModeDataManager().get_deal_codes())[0]:
                 return False, f"鍓嶆帓浠g爜鍙拱锛歿pre_code}"
             # 璺濈鍓嶄竴涓槸鍚﹀湪10鍒嗛挓鍐�
             if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'),
@@ -1463,6 +1423,37 @@
         return True, ""
 
     @classmethod
+    def get_code_kpl_blocks(cls, code):
+        blocks = KPLCodeJXBlockManager().get_jx_blocks_radical(code)
+        if blocks is None:
+            blocks = set()
+        # 灏嗚幏鍙栨定鍋滃師鍥犱笌娑ㄥ仠鎺ㄨ崘
+        keys = TargetCodePlateKeyManager().get_plate_keys(code, contains_today=False)
+        if keys and keys[0]:
+            blocks |= set(keys[0])
+        return blocks
+
+    @classmethod
+    def get_code_blocks(cls, code):
+        """
+        鑾峰彇鐩爣浠g爜鐨勬澘鍧�
+        @param code:
+        @return: 杩囨护鍚庣殑鏉垮潡,杩囨护鍓嶇殑鏉垮潡
+        """
+        blocks = cls.get_code_kpl_blocks(code)
+        match_blocks, info = CodeThirdBlocksManager().get_intersection_blocks_info(code, blocks)
+        match_blocks -= constant.KPL_INVALID_BLOCKS
+        fblocks = match_blocks & RealTimeKplMarketData.get_top_market_jingxuan_blocks()
+        if not fblocks:
+            fblocks = set()
+        match_blocks_3, info = CodeThirdBlocksManager().get_intersection_blocks_info(code, blocks, same_count=3)
+        if match_blocks_3:
+            match_blocks_3 -= constant.KPL_INVALID_BLOCKS
+            fblocks |= match_blocks_3
+
+        return fblocks, match_blocks
+
+    @classmethod
     def is_radical_buy(cls, code, yesterday_limit_up_codes):
         """
         鏄惁鏄縺杩涗拱
@@ -1477,14 +1468,7 @@
             for c in open_limit_up_code_dict:
                 open_limit_up_blocks |= open_limit_up_code_dict[c][1]
         # 鑾峰彇浠g爜鐨勬澘鍧�
-        keys_ = KPLCodeJXBlockManager().get_jx_blocks_radical(code)
-        if not keys_:
-            return set(), "娌¤幏鍙栧埌鏉垮潡"
-        keys_ = BlockMapManager().filter_blocks(keys_)
-        if not keys_:
-            return set(), "杩囨护鍚庢病鑾峰彇鍒版澘鍧�"
-        # 鑾峰彇浜ら泦
-        keys_, info = CodeThirdBlocksManager().get_intersection_blocks_info(code, keys_)
+        keys_, info = cls.get_code_blocks(code)
         if not keys_:
             return set(), "娌¤幏鍙栧埌鏉垮潡浜ら泦"
 

--
Gitblit v1.8.0