From 48ed20404602e562e82e5f96badd45aa5c342e0f Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 01 十二月 2023 11:22:08 +0800
Subject: [PATCH] bug修复

---
 l2/code_price_manager.py |  104 ++++++++++++++++++----------------------------------
 1 files changed, 36 insertions(+), 68 deletions(-)

diff --git a/l2/code_price_manager.py b/l2/code_price_manager.py
index d7c64b0..97e56ce 100644
--- a/l2/code_price_manager.py
+++ b/l2/code_price_manager.py
@@ -19,7 +19,7 @@
     __redisManager = redis_manager.RedisManager(1)
     __latest_data = {}
     __current_buy_1_price = {}
-    __buy1_price_info_cache = {}
+    __buy1_price_limit_up_info_cache = {}
     # 涔�1鐨勯噾棰�
     __latest_buy1_money_dict = {}
     # 鏈�杩�3鍒嗛挓鍐呯殑涔�1閲戦
@@ -49,7 +49,7 @@
                 code = key.split("-")[-1]
                 val = RedisUtils.get(redis_, key)
                 val = json.loads(val)
-                tool.CodeDataCacheUtil.set_cache(cls.__buy1_price_info_cache, code, val)
+                tool.CodeDataCacheUtil.set_cache(cls.__buy1_price_limit_up_info_cache, code, val)
 
             keys = RedisUtils.keys(redis_, "buy1_price-*")
             for key in keys:
@@ -67,22 +67,26 @@
         finally:
             RedisUtils.realse(redis_)
 
-    # 淇濆瓨涔�1浠锋牸淇℃伅
+    # --------------------------------涓婃澘涓庣偢鏉挎椂闂磋褰�--------------------------------
 
-    def __save_buy1_price_info(self, code, limit_up_time, open_limit_up_time):
-        tool.CodeDataCacheUtil.set_cache(self.__buy1_price_info_cache, code, (limit_up_time, open_limit_up_time))
+    def __save_buy1_price_limit_up_info(self, code, limit_up_time, open_limit_up_time):
+        if limit_up_time and open_limit_up_time and tool.trade_time_sub(limit_up_time, open_limit_up_time) > 0:
+            # 鐐告澘鏃堕棿涓嶅彲鑳芥瘮涓婃澘鏃堕棿杩樻棭
+            return
+        tool.CodeDataCacheUtil.set_cache(self.__buy1_price_limit_up_info_cache, code,
+                                         (limit_up_time, open_limit_up_time))
         RedisUtils.setex_async(self.__db, f"buy1_price_limit_up_info-{code}", tool.get_expire(),
                                json.dumps((limit_up_time, open_limit_up_time)))
 
-    def __get_buy1_price_info(self, code):
+    def __get_buy1_price_limit_up_info(self, code):
         data = RedisUtils.get(self.__get_redis(), f"buy1_price_limit_up_info-{code}")
         if not data:
             return None, None
         data = json.loads(data)
         return data[0], data[1]
 
-    def __get_buy1_price_info_cache(self, code):
-        cache_result = tool.CodeDataCacheUtil.get_cache(self.__buy1_price_info_cache, code)
+    def __get_buy1_price_limit_up_info_cache(self, code):
+        cache_result = tool.CodeDataCacheUtil.get_cache(self.__buy1_price_limit_up_info_cache, code)
         if cache_result[0]:
             return cache_result[1]
         return None, None
@@ -111,7 +115,7 @@
             return cache_result[1]
         return None
 
-    # 璁剧疆鐐告澘鍚庣殑鏈�浣庝环
+    # ------------------------鐐告澘鍚庣殑鏈�浣庝环------------------------------
 
     def __save_open_limit_up_lowest_price(self, code, price):
         tool.CodeDataCacheUtil.set_cache(self.__open_limit_up_lowest_price_cache, code, round(float(price), 2))
@@ -127,19 +131,20 @@
         return None
 
     def set_open_limit_up_lowest_price(self, code, price):
+        # 鍒ゆ柇鏄惁鐐告澘
         old_price = self.__get_open_limit_up_lowest_price_cache(code)
         if not old_price or float(old_price) > float(price):
             self.__save_open_limit_up_lowest_price(code, price)
+
+    def get_open_limit_up_lowest_price(self, code):
+        price = self.__get_open_limit_up_lowest_price_cache(code)
+        return price
 
     def get_buy1_price(self, code):
         cache_result = tool.CodeDataCacheUtil.get_cache(self.__current_buy_1_price, code)
         if cache_result[0]:
             return cache_result[1]
         return None
-
-    def get_open_limit_up_lowest_price(self, code):
-        price = self.__get_open_limit_up_lowest_price_cache(code)
-        return price
 
     def get_average_rate(self, code):
         return self.__average_rate_dict.get(code)
@@ -172,67 +177,30 @@
         self.__save_buy1_price(code, buy_1_price)
 
         is_limit_up = abs(float(limit_up_price) - float(buy_1_price)) < 0.01
-        old_limit_up_time, old_open_limit_up_time = self.__get_buy1_price_info_cache(code)
-        if old_limit_up_time and old_open_limit_up_time:
-            return
-        if is_limit_up and old_limit_up_time is None and float(sell_1_price) < 0.1 and int(sell_1_volumn) <= 0:
+        old_limit_up_time, old_open_limit_up_time = self.__get_buy1_price_limit_up_info_cache(code)
+        # 鍒ゆ柇鐪熸娑ㄥ仠
+        if is_limit_up and not old_limit_up_time and int(sell_1_volumn) <= 0:
             # 鍗�1娑堝け锛屼拱1涓烘定鍋滀环鍒欒〃绀烘定鍋�
-            self.__save_buy1_price_info(code, time_str, None)
-        elif old_limit_up_time and not is_limit_up and old_open_limit_up_time is None:
+            self.__save_buy1_price_limit_up_info(code, time_str, None)
+        elif old_limit_up_time and not is_limit_up and not old_open_limit_up_time:
             # 鏈夋定鍋滄椂闂达紝褰撳墠娌℃湁娑ㄥ仠锛屼箣鍓嶆病鏈夋墦寮�娑ㄥ仠
-            self.__save_buy1_price_info(code, old_limit_up_time, time_str)
-
+            self.__save_buy1_price_limit_up_info(code, old_limit_up_time, time_str)
         if old_limit_up_time and not is_limit_up:
-            # 鑾峰彇璁$畻褰撳墠鐨勬定骞�
-            pre_close_price = round(float(limit_up_price) / 1.1, 2)
-            if (float(buy_1_price) - pre_close_price) / pre_close_price < 0.05:
-                # 娑ㄥ箙灏忎簬5%
-                l2_trade_util.forbidden_trade(code, "娑ㄥ仠鐐稿紑鍚庣幇浠锋定骞呭皬浜�5%涔嬪悗涓嶄拱")
-                async_log_util.info(logger_trade_queue_price_info, f"娑ㄥ仠鐐稿紑鍚庣幇浠锋定骞呭皬浜�5%涔嬪悗涓嶄拱锛歝ode-{code}")
-            # 涔嬪墠娑ㄥ仠杩囦笖鐜板湪灏氭湭娑ㄥ仠
-            self.set_open_limit_up_lowest_price(code, buy_1_price)
 
-    # datas:[ (code, buy_1_price, time_str, limit_up_price, sell_1_price, sell_1_volumn)  ]
-
-    def processes(self, datas):
-        temp_buy1_prices = []
-        for d in datas:
-            code, buy_1_price, time_str, limit_up_price, sell_1_price, sell_1_volumn = d
-            data_str = f"{buy_1_price},{time_str},{limit_up_price},{sell_1_price},{sell_1_volumn}"
-            if self.__latest_data.get(code) == data_str:
-                continue
-            self.__latest_data[code] = data_str
-            # 淇濆瓨涔�1浠锋牸
-            temp_buy1_prices.append((code, buy_1_price))
-
-            # 璁板綍鏃ュ織
-            logger_trade_queue_price_info.info(
-                f"code={code} data: time_str-{time_str}, buy_1_price-{buy_1_price},limit_up_price-{limit_up_price},sell_1_price-{sell_1_price},sell_1_volumn-{sell_1_volumn}")
-            # 涔�1浠锋牸涓嶈兘灏忎簬1鍧�
-            if float(buy_1_price) < 1.0:
-                continue
-
-            is_limit_up = abs(float(limit_up_price) - float(buy_1_price)) < 0.01
-            old_limit_up_time, old_open_limit_up_time = self.__get_buy1_price_info_cache(code)
-            if old_limit_up_time and old_open_limit_up_time:
-                continue
-            if is_limit_up and old_limit_up_time is None and float(sell_1_price) < 0.1 and int(sell_1_volumn) <= 0:
-                # 鍗�1娑堝け锛屼拱1涓烘定鍋滀环鍒欒〃绀烘定鍋�
-                self.__save_buy1_price_info(code, time_str, None)
-            elif old_limit_up_time and not is_limit_up and old_open_limit_up_time is None:
-                # 鏈夋定鍋滄椂闂达紝褰撳墠娌℃湁娑ㄥ仠锛屼箣鍓嶆病鏈夋墦寮�娑ㄥ仠
-                self.__save_buy1_price_info(code, old_limit_up_time, time_str)
-
-            if old_limit_up_time and not is_limit_up:
+            limit_up_time, open_limit_up_time = self.__get_buy1_price_limit_up_info_cache(code)
+            if limit_up_time and open_limit_up_time:
+                # 鑾峰彇璁$畻褰撳墠鐨勬定骞�
+                pre_close_price = round(float(limit_up_price) / 1.1, 2)
+                if (float(buy_1_price) - pre_close_price) / pre_close_price < 0.05:
+                    # 鐐稿紑涓旀定骞呭皬浜�5%
+                    l2_trade_util.forbidden_trade(code, "娑ㄥ仠鐐稿紑鍚庣幇浠锋定骞呭皬浜�5%涔嬪悗涓嶄拱")
+                    async_log_util.info(logger_trade_queue_price_info, f"娑ㄥ仠鐐稿紑鍚庣幇浠锋定骞呭皬浜�5%涔嬪悗涓嶄拱锛歝ode-{code}")
                 # 涔嬪墠娑ㄥ仠杩囦笖鐜板湪灏氭湭娑ㄥ仠
                 self.set_open_limit_up_lowest_price(code, buy_1_price)
-        if temp_buy1_prices:
-            self.__save_buy1_prices(temp_buy1_prices)
 
     # 鏄惁鍙互涓嬪崟
-
     def is_can_buy(self, code):
-        old_limit_up_time, old_open_limit_up_time = self.__get_buy1_price_info_cache(code)
+        old_limit_up_time, old_open_limit_up_time = self.__get_buy1_price_limit_up_info_cache(code)
         if old_limit_up_time and old_open_limit_up_time:
             return True
         return False
@@ -241,15 +209,15 @@
     # 杩斿洖娑ㄥ仠鏃堕棿涓庣偢鏉挎椂闂�
 
     def get_limit_up_info(self, code):
-        old_limit_up_time, old_open_limit_up_time = self.__get_buy1_price_info_cache(code)
+        old_limit_up_time, old_open_limit_up_time = self.__get_buy1_price_limit_up_info_cache(code)
         return old_limit_up_time, old_open_limit_up_time
 
     # 璁剧疆娑ㄥ仠鏃堕棿
 
     def set_limit_up_time(self, code, time_str):
         limit_up_time, open_limit_up_time = self.get_limit_up_info(code)
-        if limit_up_time is None:
-            self.__save_buy1_price_info(code, time_str, None)
+        if not limit_up_time:
+            self.__save_buy1_price_limit_up_info(code, time_str, None)
 
     # 鑾峰彇鏈�杩戠殑涔�1閲戦
     def get_latest_buy1_money(self, code):

--
Gitblit v1.8.0