From 7499d1aab63c5a97bc416f28a7e44d9e07b0ec65 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 25 十一月 2024 18:03:58 +0800
Subject: [PATCH] 更新板块流入流出统计

---
 third_data/custom_block_in_money_manager.py |   86 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 84 insertions(+), 2 deletions(-)

diff --git a/third_data/custom_block_in_money_manager.py b/third_data/custom_block_in_money_manager.py
index 57b1e87..261897a 100644
--- a/third_data/custom_block_in_money_manager.py
+++ b/third_data/custom_block_in_money_manager.py
@@ -2,9 +2,11 @@
 鑷畾涔夋澘鍧楁祦鍏ラ噾棰�
 """
 import copy
+import itertools
 import os
 
 import constant
+from db import mysql_data_delegate as mysql_data
 from huaxin_client import l1_subscript_codes_manager
 from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager
 from third_data.third_blocks_manager import BlockMapManager
@@ -53,11 +55,15 @@
     """
     鏉垮潡娴佸叆娴佸嚭绠$悊
     """
-
+    __mysql_db = mysql_data.Mysqldb()
     __code_blocks = {}
 
     __in_list = []
     __out_list = []
+    # 鏈�杩戣繖娈垫椂闂寸殑浠g爜娑ㄥ仠娆℃暟
+    __history_code_limit_up_count = {}
+    # 琚帓闄ょ殑浠g爜
+    __exclude_codes = set()
 
     def __load_codes(self):
         codes = []
@@ -79,9 +85,59 @@
                     fblocks -= constant.KPL_INVALID_BLOCKS
                 self.__code_blocks[code] = fblocks
 
+    def __load_exclude_codes(self):
+        """
+        鑾峰彇涔嬪墠4涓氦鏄撴棩鐨勬暟鎹�
+        @return:
+        """
+        max_day = tool.get_now_date_str()
+        min_day = tool.date_sub(max_day, 30)
+        sql = f"select * from (select distinct(r.`_day`) as 'day' from `kpl_limit_up_record` r where r.`_day`<'{max_day}' and r.`_day`>'{min_day}') a order by a.day desc limit 4"
+        results = self.__mysql_db.select_all(sql)
+        dates = [r[0] for r in results]
+        # 鑾峰彇涔嬪墠4澶╂定鍋滄鏁�>=2娆$殑浠g爜
+        day_codes = {}
+        for day in dates:
+            sql = f"select distinct(r._code) from kpl_limit_up_record r where r.`_day`='{day}'"
+            results = self.__mysql_db.select_all(sql)
+            day_codes[day] = set([x[0] for x in results])
+        codes_list = [day_codes[k] for k in day_codes]
+        # 缁熻浠g爜鐨勬定鍋滃ぉ鏁�
+        code_limit_up_count_dict = {}
+        for codes in codes_list:
+            for c in codes:
+                if c not in code_limit_up_count_dict:
+                    code_limit_up_count_dict[c] = 0
+                code_limit_up_count_dict[c] += 1
+        self.__history_code_limit_up_count = code_limit_up_count_dict
+        self.load_today_limit_up_codes()
+
+    def load_today_limit_up_codes(self):
+        # 鍔犺浇浠婃棩娑ㄥ仠浠g爜
+        day = tool.get_now_date_str()
+        sql = f"select distinct(r._code) from kpl_limit_up_record r where r.`_day`='{day}'"
+        results = self.__mysql_db.select_all(sql)
+        codes = set([x[0] for x in results])
+        # 璁$畻闇�瑕佹帓闄ょ殑浠g爜
+        temp_limit_up_count = {}
+        # 缁熻鎬诲叡娑ㄥ仠澶╂暟
+        for c in self.__history_code_limit_up_count:
+            if c in codes:
+                temp_limit_up_count[c] = self.__history_code_limit_up_count[c] + 1
+            else:
+                temp_limit_up_count[c] = self.__history_code_limit_up_count[c]
+        exclude_codes = set()
+        for c in temp_limit_up_count:
+            if temp_limit_up_count[c] < 3:
+                continue
+            exclude_codes.add(c)
+        self.__exclude_codes = exclude_codes
+
     def __init__(self):
         self.codes = self.__load_codes()
         self.__load_blocks()
+        self.__load_exclude_codes()
+        print("鎺掗櫎鐨勪唬鐮�", self.__exclude_codes)
 
     def get_codes(self):
         return self.codes
@@ -90,6 +146,8 @@
         codes = self.codes
         block_money = {}
         for code in codes:
+            if code in self.__exclude_codes:
+                continue
             money = CodeInMoneyManager().get_money(code)
             if money is None:
                 continue
@@ -110,6 +168,29 @@
         temp_list.sort(key=lambda x: x[1])
         self.__out_list = temp_list
 
+    def get_block_codes_money(self, block):
+        """
+        鑾峰彇鏉垮潡涓唬鐮佺殑娴佸叆娴佸嚭
+        @param block:
+        @return:(浠g爜, 閲戦, 鏄惁琚帓闄�)
+        """
+        codes = self.codes
+        fdatas = []
+        for code in codes:
+            if code in self.__exclude_codes:
+                continue
+            money = CodeInMoneyManager().get_money(code)
+            if money is None:
+                continue
+            before_fblocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(code)
+            if not before_fblocks:
+                before_fblocks = set()
+            fblocks = BlockMapManager().filter_blocks(before_fblocks)
+            if block not in fblocks:
+                continue
+            fdatas.append((code, money, code in self.__exclude_codes))
+        return fdatas
+
     def get_in_list(self):
         return self.__in_list
 
@@ -118,7 +199,8 @@
 
 
 if __name__ == '__main__':
-    print(CodeInMoneyManager().get_money("300264"))
+    BlockInMoneyRankManager()
+    # print(CodeInMoneyManager().get_money("300264"))
     # BlockInMoneyRankManager().compute()
     # print(BlockInMoneyRankManager().get_in_list()[:20])
     # print(BlockInMoneyRankManager().get_out_list()[:20])

--
Gitblit v1.8.0