From 46aa2eb6b6520333cb8ebb525fd4f7f93b0be60c Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 09 四月 2025 15:36:51 +0800
Subject: [PATCH] 新板块重新定义

---
 trade/buy_radical/new_block_processor.py |   72 ++++++++++++++++++++++++++++++++++++
 1 files changed, 72 insertions(+), 0 deletions(-)

diff --git a/trade/buy_radical/new_block_processor.py b/trade/buy_radical/new_block_processor.py
index 9e7140b..3068298 100644
--- a/trade/buy_radical/new_block_processor.py
+++ b/trade/buy_radical/new_block_processor.py
@@ -1,11 +1,83 @@
 """
 鏂伴鏉愬鐞嗗櫒
 """
+import constant
 from code_attribute import code_nature_analyse
 from code_attribute.gpcode_manager import HumanRemoveForbiddenManager
+from third_data import kpl_util
 from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager
 from trade import l2_trade_util, trade_record_log_util
 from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
+from utils import tool
+from utils.kpl_data_db_util import KPLLimitUpDataUtil
+
+
+@tool.singleton
+class BeforeBlocksComputer:
+    """
+    寰�鏃ラ鏉愯绠楀櫒
+    """
+    def __init__(self):
+        self.__before_blocks = set()
+        self.__load_data()
+
+    def __load_data(self):
+        # kpl_results: [( r.`_code`, r.`_day`, r.`_hot_block_name`, r.`_blocks`,  r.`_open`)]
+        kpl_results = KPLLimitUpDataUtil.get_latest_block_infos()
+        days = set()
+        for r in kpl_results:
+            # 鍙�60涓氦鏄撴棩涔嬪唴鐨勯鏉�
+            days.add(r[1])
+        days = list(days)
+        days.sort(key=lambda x: int(x.replace("-", "")), reverse=True)
+        days = days[:60]
+        # {"鏃ユ湡":{ "棰樻潗":{浠g爜} }}
+        day_block_codes_dict = {}
+        for r in kpl_results:
+            if r[1] not in days:
+                continue
+            if r[4]:
+                # 涓嶇畻鐐告澘
+                continue
+            # 缁熻姣忎竴澶╃殑棰樻潗
+            day = r[1]
+            block = kpl_util.filter_block(r[2])
+            if block in constant.KPL_INVALID_BLOCKS:
+                continue
+            if day not in day_block_codes_dict:
+                day_block_codes_dict[day] = {}
+            if block not in day_block_codes_dict[day]:
+                day_block_codes_dict[day][block] = set()
+            day_block_codes_dict[day][block].add(r[0])
+
+        # 姣忎竴澶╄蛋鐨勬澘鍧�
+        day_block_dict = {}
+        for day in day_block_codes_dict:
+            for b in day_block_codes_dict[day]:
+                if len(day_block_codes_dict[day][b]) >= 3:
+                    if day not in day_block_dict:
+                        day_block_dict[day] = set()
+                    day_block_dict[day].add(b)
+        day_block_list = [(d, day_block_dict[d]) for d in day_block_dict]
+        day_block_list.sort(key=lambda x: x[0])
+        # 杩囧幓59澶╁嚭鐜扮殑棰樻潗
+        old_blocks = set()
+        for d in day_block_list:
+            if d[0] == days[0]:
+                continue
+            old_blocks |= d[1]
+        self.__before_blocks |= old_blocks
+
+        # 鏄ㄥぉ鍑虹幇鐨勯鏉�
+        # if days[0] == day_block_list[-1][0]:
+        #     # 鏄ㄥぉ鍑虹幇鐨勯鏉�
+        #     yesterday_blocks = day_block_list[-1][1]
+
+    def is_new_block(self, block):
+        return block not in self.__before_blocks
+
+    def get_old_blocks(self):
+        return self.__before_blocks
 
 
 def process_new_block(code, block):

--
Gitblit v1.8.0