From 99684540b2c6d05ebb3b21163da0a5e314a07052 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 30 九月 2024 01:11:50 +0800
Subject: [PATCH] bug修复

---
 third_data/code_plate_key_manager.py |  102 ++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 81 insertions(+), 21 deletions(-)

diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py
index bc99aa9..5521fa7 100644
--- a/third_data/code_plate_key_manager.py
+++ b/third_data/code_plate_key_manager.py
@@ -1349,8 +1349,8 @@
     def __is_radical_buy_with_block_up(cls, code, block, yesterday_limit_up_codes):
         """
         鏄惁婵�杩涗拱锛堟澘鍧楃獊鐒舵定璧锋潵锛�
-        1.鑰佸ぇ鍜岃�佷簩鐨勬定鍋滄椂闂寸浉宸�5鍒嗛挓鍐�
-        2.鑰佷笁鐨勬定鍋滄椂闂磋窛绂昏�佸ぇ娑ㄥ仠鍦�10鍒嗛挓鍐呭氨涔�
+        1.鑰佷簩鍜岃�佷笁鐨勬定鍋滄椂闂寸浉宸�5鍒嗛挓鍐�
+        2.鑰佷笁涓嶈兘涔伴『浣嶅埌鑰佸洓锛堣�佸洓涓庤�佷笁鐩稿樊10鍒嗛挓鍐咃級
         3.鍓�2涓エ涓嶈兘鐐告澘锛堝巻鍙茶韩浣嶄笌鐜板湪韬綅涓�鑷达級
         4.闄ゅ紑鍓嶄袱涓唬鐮佸彲涔拌��1涓庤��2
         5.涔拌��2鐨勬儏鍐碉細鑰�1涓嶆弧瓒充拱鍏ユ潯浠�
@@ -1367,47 +1367,100 @@
         if len(current_before_codes_info) < 2:
             return False, f"鍓嶆帓浠g爜灏忎簬2涓細{current_before_codes_info}"
 
-
-        # 鑰佸ぇ锛岃�佷簩蹇呴』鐩搁殧5鍒嗛挓鍐�
-        # if current_before_codes_info[1][1] - current_before_codes_info[0][1] >= 5 * 60:
-        #     return False, f"鑰佸ぇ鑰佷簩娑ㄥ仠鏃堕棿蹇呴』闂撮殧5鍒嗛挓鍐�"
-
         # 鑾峰彇褰撳墠浠g爜鐨勬定鍋滄椂闂�
         limit_up_timestamp = LimitUpDataConstant.get_first_limit_up_time(code)
         if not limit_up_timestamp:
             limit_up_timestamp = time.time()
-        if limit_up_timestamp - current_before_codes_info[0][1] >= 15 * 60:
-            return False, f"璺濈鑰佸ぇ娑ㄥ仠宸茶繃鍘�15鍒嗛挓锛坽current_before_codes_info[0]}锛�"
+
+        # 褰撳墠浠g爜寮�1涓嶈兘涔�
+        if limit_up_timestamp < kpl_block_util.open_limit_up_time_range[1]:
+            return False, f"褰撳墠浠g爜寮�1"
+
+        if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'),
+                               tool.timestamp_format(current_before_codes_info[-1][1], '%H:%M:%S')) >= 10 * 60:
+            return False, f"璺濈涓婁釜浠g爜娑ㄥ仠宸茶繃鍘�10鍒嗛挓锛坽current_before_codes_info[0]}锛�"
 
         history_index, history_before_codes_info = cls.__get_history_index(code, block, set())
         history_before_codes = [x[0] for x in history_before_codes_info]
-
-        # 鍒ゆ柇鏄惁鏄��3涓斾笌鑰佷簩闂撮殧5鍒嗛挓浠ュ唴
-        if current_index == 2 and history_index == 2:
-            if limit_up_timestamp - current_before_codes_info[-1][1] <= 5 * 60:
-                if RedicalBuyDataManager.can_buy(code)[0]:
-                    return True, f"鑰佷簩鑰佷笁闂撮殧5鍒嗛挓鍐咃細鍓嶆帓浠g爜-{current_before_codes_info}"
-
-        if current_before_codes_info[0][1] < kpl_block_util.open_limit_up_time_range[1]:
-            return False, f"鏈夊紑1锛歿current_before_codes_info}"
-
         # 鍓嶄袱涓唬鐮佹槸鍚︽湁鐐告澘
         dif_codes = set(history_before_codes[:2]) - set(current_before_codes[:2])
         if dif_codes:
             return False, f"鍓�2浠g爜鏈夌偢鏉匡細{dif_codes}"
         # 涓嶈绠楀墠2鐨勪唬鐮�
-        exclude_codes = set(current_before_codes[:2])
+
+        exclude_codes = set()
+        for x in current_before_codes:
+            if x[1] < kpl_block_util.open_limit_up_time_range[1]:
+                exclude_codes.add(x[0])
+        # 闄ゅ幓鍓嶄簩浠g爜涓庡紑1浠g爜涔嬪悗鏄惁涓洪鏉胯�佸ぇ锛氭墍鏈夊紑1鐨勮涓�1涓�
+        open_count = len(exclude_codes)
+        if open_count > 0 and open_count + 1 <= len(current_before_codes):
+            # 鍓嶆帓鏈夊紑1
+            exclude_codes |= set(current_before_codes[open_count:open_count + 1])
+        else:
+            exclude_codes |= set(current_before_codes[:2])
+
+        open_limit_up_code_dict = kpl_data_constant.open_limit_up_code_dict_for_radical_buy
+        if open_limit_up_code_dict:
+            exclude_codes |= set(open_limit_up_code_dict.keys())
         history_index, history_before_codes_info = cls.__get_history_index(code, block, yesterday_limit_up_codes,
                                                                            exclude_codes)
         if history_index > 1:
             return False, f"鎺掗櫎鍓�2锛岀洰鏍囦唬鐮佷綅浜庡巻鍙茶韩浣�-{history_index + 1}锛屽墠鎺掍唬鐮侊細{history_before_codes_info}"
-        if history_index == 1:
+        elif history_index == 1:
             # 棣栨澘鑰�2锛屽垽鏂墠闈㈢殑鑰佸ぇ鏄惁鏄睘浜庝笉鑳戒拱鐨勮寖鐣�
             pre_code = history_before_codes_info[0][0]
             # pre_code涓嶈兘涔帮紝鎵嶈兘涔�
             if RedicalBuyDataManager.can_buy(pre_code)[0]:
                 return False, f"鍓嶆帓浠g爜鍙拱锛歿pre_code}"
+            # 璺濈鍓嶄竴涓槸鍚﹀湪10鍒嗛挓鍐�
+            if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'),
+                                   tool.timestamp_format(history_before_codes_info[-1][1], '%H:%M:%S')) >= 10 * 60:
+                return False, f"璺濈涓婁釜涓嶈兘涔扮殑浠g爜娑ㄥ仠宸茶繃鍘�10鍒嗛挓锛坽history_before_codes_info[0]}锛�"
+        else:
+            # 璺濈涓婁釜浠g爜娑ㄥ仠5鍒嗛挓浠ュ唴
+            if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'),
+                                   tool.timestamp_format(current_before_codes_info[-1][1], '%H:%M:%S')) >= 5 * 60:
+                return False, f"璺濈涓婁釜浠g爜娑ㄥ仠宸茶繃鍘�5鍒嗛挓锛坽current_before_codes_info[-1]}锛�"
+
         return True, f"婊¤冻涔板叆闇�姹�: 鍓嶆帓浠g爜-{current_before_codes_info}"
+
+    @classmethod
+    def __is_re_limit_up(cls, code, block):
+        # 鑾峰彇韬綅
+        current_index, current_before_codes_info = cls.__get_current_index(code, block, set())
+        history_index, history_before_codes_info = cls.__get_history_index(code, block, set())
+        if current_index != history_index:
+            return False, f"鏈夊叾浠栫偢鏉�"
+        if current_index > 1:
+            return False, f"涓嶆槸鍓�2鐨勬澘鍧�"
+        history_codes = set()
+        # 鑾峰彇鏉垮潡鐐告澘鎯呭喌
+        for k in LimitUpDataConstant.history_limit_up_datas:
+            _code = k[3]
+            blocks = LimitUpDataConstant.get_blocks_with_history(_code)
+            blocks = BlockMapManager().filter_blocks(blocks)
+            # 涓嶆槸杩欎釜鏉垮潡
+            if block in blocks:
+                history_codes.add(_code)
+        if len(history_codes) <= 4:
+            return False, f"鏉垮潡鍘嗗彶娑ㄥ仠灏忎簬4涓細{history_codes}"
+        # 鑾峰彇褰撳墠娑ㄥ仠鏁伴噺
+        current_codes = set()
+        for k in LimitUpDataConstant.current_limit_up_datas:
+            _code = k[0]
+            blocks = LimitUpDataConstant.get_blocks_with_history(_code)
+            if not blocks:
+                blocks = set()
+            blocks = BlockMapManager().filter_blocks(blocks)
+            # 涓嶆槸杩欎釜鏉垮潡
+            if block in blocks:
+                current_codes.add(_code)
+        current_codes.add(code)
+        diff = history_codes - current_codes
+        if diff:
+            return False, f"鏉垮潡鐐告澘涓嶆褰撳墠绁細{diff}"
+        return True, ""
 
     @classmethod
     def is_radical_buy(cls, code, yesterday_limit_up_codes):
@@ -1455,6 +1508,13 @@
                     can_buy_blocks.add(b)
                 msges.append(f"銆恵b}銆�:{result[1]}")
             fmsges.append("鏉垮潡蹇�熷惎鍔ㄥ垽鏂�##" + ",".join(msges))
+
+        if not can_buy_blocks:
+            for b in keys_:
+                result = cls.__is_re_limit_up(code, b)
+                if result[0]:
+                    can_buy_blocks.add(b)
+
         return can_buy_blocks, " **** ".join(fmsges)
 
 

--
Gitblit v1.8.0