From 3af02884a1f2e98c899cc2f21ab434fd6062c34f Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期日, 28 四月 2024 17:32:43 +0800
Subject: [PATCH] 板块调整

---
 third_data/code_plate_key_manager.py |  117 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 107 insertions(+), 10 deletions(-)

diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py
index d61a502..d49f38a 100644
--- a/third_data/code_plate_key_manager.py
+++ b/third_data/code_plate_key_manager.py
@@ -515,6 +515,15 @@
     @classmethod
     def __is_need_active_buy(cls, code, block, current_limit_up_datas, limit_up_record_datas,
                              yesterday_current_limit_up_codes):
+        """
+        婵�杩涗拱鍏ヨ鍒欙細涓绘澘鑰佸ぇ涓斿墠闈㈡湁楂樹綅鏉�/20cm
+        @param code:
+        @param block:
+        @param current_limit_up_datas:
+        @param limit_up_record_datas:
+        @param yesterday_current_limit_up_codes:
+        @return:
+        """
         code_limit_up_reason_dict = {}
         for d in limit_up_record_datas:
             code_limit_up_reason_dict[d[3]] = d[2]
@@ -705,6 +714,93 @@
         #
         #         return False, f"鏉垮潡-{block}: top4娑ㄥ仠鏉垮潡锛岄潪涓绘澘寮�1,涓嶄负涓绘澘榫�1锛堝疄鏃惰韩浣�-{current_shsz_rank}:{front_current_shsz_rank_codes},鍘嗗彶韬綅-{record_shsz_rank}锛�"
 
+    @classmethod
+    def __is_block_can_buy_new(cls, code, block, current_limit_up_datas, code_limit_up_reasons_dict,
+                               yesterday_current_limit_up_codes, limit_up_record_datas,
+                               current_limit_up_block_codes_dict,
+                               high_level_code_blocks=None, high_level_block_codes=None):
+        """
+        璇ョエ鐨勬澘鍧楁槸鍚﹀彲浠ヤ拱
+        @param code:
+        @param block:
+        @param current_limit_up_datas:
+        @param code_limit_up_reasons_dict:
+        @param yesterday_current_limit_up_codes:
+        @param limit_up_record_datas:
+        @param current_limit_up_block_codes_dict:
+        @param high_level_code_blocks:
+        @param high_level_block_codes:
+        @return:
+        """
+        # 鐙嫍鍒ゆ柇
+        if high_level_code_blocks is None:
+            high_level_code_blocks = {}
+        if high_level_block_codes is None:
+            high_level_block_codes = {}
+        block_codes = current_limit_up_block_codes_dict.get(block)
+        if block_codes is None:
+            block_codes = set()
+        # 璁$畻鏄惁闇�瑕佹縺杩涗拱鍏�
+        active_buy = cls.__is_need_active_buy(code, block, current_limit_up_datas,
+                                              limit_up_record_datas,
+                                              yesterday_current_limit_up_codes)
+
+        if not block_codes:
+            # 楂樹綅鏉挎硾鍖栨澘鍧椾腑鏃犳澘鍧�
+            if not high_level_block_codes.get(block):
+                return False, True, f"{block}:鏉垮潡鏃犳定鍋�", False, active_buy
+        elif len(block_codes) == 1 and code in block_codes:
+            if not high_level_block_codes.get(block):
+                return False, True, f"{block}:鏉垮潡鍙湁褰撳墠浠g爜娑ㄥ仠", False, active_buy
+        # 鍙互涔扮殑鏈�澶ф帓鍚�
+        # open_limit_up_codes = kpl_block_util.get_shsz_open_limit_up_codes(code, block, limit_up_record_datas,
+        #                                                                   code_limit_up_reason_dict)
+        current_open_limit_up_codes = kpl_block_util.get_shsz_open_limit_up_codes_current(code, block,
+                                                                                          current_limit_up_datas)
+
+        is_strong_block = False
+
+        # 鏈�澶氫拱鑰佸嚑
+        RANKS = [5, 4, 3, 3, 3, 2, 2]
+        RANK_TIMES = ["10:00:00", "10:30:00", "11:00:00", "11:30:00", "13:30:00", "14:00:00", "15:00:00"]
+        now_time_str = tool.get_now_time_str()
+        max_rank = 2
+        for i in range(len(RANK_TIMES)):
+            if tool.trade_time_sub(now_time_str, RANK_TIMES[i]) <= 0:
+                max_rank = RANKS[i]
+                break
+
+        # 闇�瑕佹帓闄ょ殑鑰佸ぇ鐨勪唬鐮�
+        exclude_first_codes = set()
+
+        # 鑾峰彇涓绘澘寮�1鐨勪唬鐮�
+
+        # 鍓旈櫎楂樹綅鏉�
+        if current_open_limit_up_codes and yesterday_current_limit_up_codes:
+            current_open_limit_up_codes -= yesterday_current_limit_up_codes
+
+        # 鑾峰彇浠g爜鐨勫垵娆℃定鍋滄椂闂�
+        first_limit_up_time = time.time()
+        # if limit_up_record_datas:
+        for r in limit_up_record_datas:
+            if r[3] == code:
+                first_limit_up_time = int(r[5])
+
+        # 鑾峰彇涓绘澘瀹炴椂韬綅,鍓旈櫎楂樹綅鏉�
+        current_shsz_rank, front_current_shsz_rank_codes = kpl_block_util.get_code_current_rank(code, block,
+                                                                                                current_limit_up_datas,
+                                                                                                code_limit_up_reasons_dict,
+                                                                                                yesterday_current_limit_up_codes,
+                                                                                                exclude_first_codes,
+                                                                                                len(
+                                                                                                    current_open_limit_up_codes),
+                                                                                                shsz=True,
+                                                                                                limit_up_time=first_limit_up_time)
+        if current_shsz_rank < len(current_open_limit_up_codes) + max_rank:
+            return True, False, f"銆恵block}銆戝墠鎺掍唬鐮侊細{current_shsz_rank}", is_strong_block, active_buy
+        else:
+            return False, False, f"銆恵block}銆戝墠鎺掍唬鐮侊細{front_current_shsz_rank_codes} 瓒呰繃{len(current_open_limit_up_codes) + max_rank}涓�", is_strong_block, active_buy
+
     # 鑾峰彇鍙互涔扮殑鏉垮潡
     # current_limit_up_datas: 浠婃棩瀹炴椂娑ㄥ仠
     # latest_2_day_limit_up_datas锛氭渶杩�2澶╃殑瀹炴椂娑ㄥ仠锛堜笉鍚粖鏃ワ級
@@ -745,14 +841,14 @@
         code_limit_up_reasons_dict = {}
         load_code_block()
         for block in keys:
-            can_buy, unique, msg, is_strong, active_buy_info = cls.__is_block_can_buy(code, block,
-                                                                                      current_limit_up_datas,
-                                                                                      code_limit_up_reasons_dict,
-                                                                                      yesterday_current_limit_up_codes,
-                                                                                      limit_up_record_datas,
-                                                                                      current_limit_up_block_codes_dict,
-                                                                                      high_level_code_blocks=high_level_general_code_blocks,
-                                                                                      high_level_block_codes=high_level_general_block_codes)
+            can_buy, unique, msg, is_strong, active_buy_info = cls.__is_block_can_buy_new(code, block,
+                                                                                          current_limit_up_datas,
+                                                                                          code_limit_up_reasons_dict,
+                                                                                          yesterday_current_limit_up_codes,
+                                                                                          limit_up_record_datas,
+                                                                                          current_limit_up_block_codes_dict,
+                                                                                          high_level_code_blocks=high_level_general_code_blocks,
+                                                                                          high_level_block_codes=high_level_general_block_codes)
             fresults.append((block, can_buy, unique, msg, is_strong, active_buy_info))
         return fresults, keys
 
@@ -762,7 +858,7 @@
     @classmethod
     def can_buy(cls, code):
         if constant.TEST:
-            return ["娴嬭瘯"], True, cls.BLOCK_TYPE_NONE, [], set(),["鍖栧伐"]
+            return ["娴嬭瘯"], True, cls.BLOCK_TYPE_NONE, [], set(), ["鍖栧伐"]
         # if True:
         #     # 娴嬭瘯
         #     return True, "涓嶅垽鏂澘鍧楄韩浣�"
@@ -903,7 +999,8 @@
                                                                                                                    current_limit_up_block_codes_dict,
                                                                                                                    high_level_general_code_blocks)
         # 淇濆瓨鏉垮潡璁$畻缁撴灉
-        cls.__can_buy_compute_result_dict[code] = (can_buy_blocks, unique, msg, can_buy_strong_blocks, keys, active_buy_blocks)
+        cls.__can_buy_compute_result_dict[code] = (
+            can_buy_blocks, unique, msg, can_buy_strong_blocks, keys, active_buy_blocks)
 
 
 if __name__ == "__main__":

--
Gitblit v1.8.0