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