From 5dbde33455497c27a0767d6ea8c81b0bf076f607 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 29 十一月 2024 10:29:37 +0800
Subject: [PATCH] 隔夜单修改

---
 third_data/custom_block_in_money_manager.py |  105 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 97 insertions(+), 8 deletions(-)

diff --git a/third_data/custom_block_in_money_manager.py b/third_data/custom_block_in_money_manager.py
index 22f0fd6..ef37049 100644
--- a/third_data/custom_block_in_money_manager.py
+++ b/third_data/custom_block_in_money_manager.py
@@ -2,8 +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
@@ -17,17 +20,23 @@
         self.__load_data()
 
     def __load_data(self):
-        with open(f"{constant.get_path_prefix()}\\logs\\huaxin_local\\l2\\upload.{tool.get_now_date_str()}.log") as f:
-            lines = f.readlines()
-            for line in lines:
-                line = line.split(" - ")[1]
-                item = eval(line)
-                self.add_data(item)
+        _path = f"{constant.get_path_prefix()}/logs/huaxin_local/l2/transaction_big_order.{tool.get_now_date_str()}.log"
+        if os.path.exists(_path):
+            with open(_path) as f:
+                lines = f.readlines()
+                for line in lines:
+                    line = line.split(" - ")[1]
+                    item = eval(line)
+                    self.add_data(item)
 
     def add_data(self, item):
         code = item[0]
         if code not in self.__code_money_dict:
             self.__code_money_dict[code] = 0
+        if not tool.is_ge_code(code) and item[2][2] < 299e4:
+            return
+        if tool.is_ge_code(code) and item[2][2] < 299e4 and item[2][1] < 290000:
+            return
         if item[1] == 0:
             self.__code_money_dict[code] += item[2][2]
         else:
@@ -50,11 +59,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 = []
@@ -76,9 +89,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
@@ -87,6 +150,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
@@ -107,6 +172,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
 
@@ -115,7 +203,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