From 7eb1a8ed1a007d80de41d131071ee38f5872700c Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 07 二月 2025 14:26:37 +0800
Subject: [PATCH] 辨识度票策略修改/恢复P撤/上传订阅涨幅

---
 trade/buy_radical/block_special_codes_manager.py |   53 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/trade/buy_radical/block_special_codes_manager.py b/trade/buy_radical/block_special_codes_manager.py
index e413b7a..4b930ed 100644
--- a/trade/buy_radical/block_special_codes_manager.py
+++ b/trade/buy_radical/block_special_codes_manager.py
@@ -59,6 +59,11 @@
             f"SELECT r.`_hot_block_name`, r.`_code`, COUNT(*) FROM kpl_limit_up_record  r WHERE r.`_day`>'{min_day}' and r.`_day`<'{max_day}' and r._code not like '68%' group by  r.`_hot_block_name`, r.`_code`")
         return results
 
+    def __list_code_blocks(self, min_day, max_day):
+        results = self.__mysql.select_all(
+            f"SELECT r.`_hot_block_name`, r.`_code`, r.`_day` FROM kpl_limit_up_record  r WHERE r.`_day`>'{min_day}' and r.`_day`<'{max_day}' and r._code not like '68%'")
+        return results
+
     def __get_limit_up_info(self, min_day):
         sql = f"SELECT r.`_code`, COUNT(r.`_code`),r.`_code_name`,IF( r.`_zylt_val` is null, 1, r.`_zylt_val`/100000000 )  FROM (SELECT * FROM kpl_limit_up_record  r ORDER BY r.`_create_time` DESC)  r WHERE r.`_day`>'{min_day}' GROUP BY r.`_code`"
         results = self.__mysql.select_all(sql)
@@ -122,13 +127,46 @@
         鑾峰彇鏉垮潡鏈夎鲸璇嗗害鐨勪唬鐮�
         @return:
         """
-        trading_dates = HistoryKDatasUtils.get_latest_trading_date(8)
-        max_day = trading_dates[-1]
+        trading_dates = HistoryKDatasUtils.get_latest_trading_date(9)
+        max_day = trading_dates[0]
         min_day = tool.date_sub(max_day, 180)
 
         block_map = self.__get_block_map()
-        # [(鏉垮潡鍚嶇О,浠g爜, 鍦ㄦ澘鍧椾腑鐨勬定鍋滄鏁�)]
-        code_block_infos = self.__get_code_blocks(min_day, max_day)
+        # 缁熻鏈�杩�180澶╂定鍋滄暟鎹�
+        # [(鏉垮潡鍚嶇О,浠g爜, 鏃ユ湡)]
+        code_block_infos = self.__list_code_blocks(min_day, max_day)
+
+        # 缁熻鏈�杩�8澶╃殑娑ㄥ仠鏁版嵁
+        min_day = trading_dates[-1]
+        code_block_infos_8 = self.__get_code_blocks(min_day, max_day)
+        # 缁熻娑ㄥ仠娆℃暟澶т簬3娆$殑娑ㄥ仠浠g爜
+        # 鏍煎紡锛歿"浠g爜":娑ㄥ仠娆℃暟}
+        count_dict = {}
+        filter_codes = set()
+        for d in code_block_infos_8:
+            if d[1] not in count_dict:
+                count_dict[d[1]] = 0
+            count_dict[d[1]] += d[2]
+            if count_dict[d[1]] > 3:
+                filter_codes.add(d[1])
+        count_dict.clear()
+        code_block_infos_8.clear()
+
+        # 鍒犻櫎鏁版嵁
+        temp_data_dict = {}
+        for d in code_block_infos:
+            if d[1] in filter_codes and int(d[2].replace("-", "")) > int(min_day.replace("-", "")):
+                # 闇�瑕佽繃婊や笖鏈�杩�8澶╂定鍋�
+                continue
+            block, code = d[0], d[1]
+            k = f"{block}#{code}"
+            if k not in temp_data_dict:
+                temp_data_dict[k] = [block, code, 0]
+            temp_data_dict[k][2] += 1
+        code_block_infos = [temp_data_dict[k] for k in temp_data_dict]
+
+        min_day = tool.date_sub(max_day, 180)
+
         code_block_dict = {}  # {"浠g爜":{"鏉垮潡": 娑ㄥ仠娆℃暟}}
         for b in code_block_infos:
             if b[1] not in code_block_dict:
@@ -139,7 +177,11 @@
             for bb in bs:
                 if bb not in code_block_dict[b[1]]:
                     code_block_dict[b[1]][bb] = 0
-                code_block_dict[b[1]][bb] += b[2]
+                if tool.is_ge_code(b[1]):
+                    # 鍒涗笟鏉�1娆℃定鍋滅畻2娆℃定鍋�
+                    code_block_dict[b[1]][bb] += b[2] * 2
+                else:
+                    code_block_dict[b[1]][bb] += b[2]
         block_codes_dict = {}  # {"鏉垮潡":[锛堜唬鐮�,娑ㄥ仠娆℃暟锛塢}
         for code in code_block_dict:
             for b in code_block_dict[code]:
@@ -214,4 +256,5 @@
 if __name__ == "__main__":
     # print(datas)
     datas = AnalysisBlockSpecialCodesManager().get_block_special_codes()
+    print(datas)
     # print(BlockSpecialCodesManager().get_code_blocks("002582"))

--
Gitblit v1.8.0