From 65afea1ba534b51f947cbe7989d7f4d650bbc9e6 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 04 十一月 2024 18:29:00 +0800 Subject: [PATCH] 代码异常保护 --- third_data/code_plate_key_manager.py | 95 +++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 79 insertions(+), 16 deletions(-) diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py index 92e7b3a..09a40b6 100644 --- a/third_data/code_plate_key_manager.py +++ b/third_data/code_plate_key_manager.py @@ -21,7 +21,7 @@ from log_module import log, async_log_util from db import redis_manager_delegate as redis_manager -from log_module.log import logger_kpl_block_can_buy, logger_debug +from log_module.log import logger_kpl_block_can_buy, logger_debug, logger_kpl_jx_out from third_data.kpl_util import KPLPlatManager from trade import trade_manager, l2_trade_util, trade_constant @@ -293,12 +293,6 @@ def get_today_limit_up_reason(cls, code): return cls.__today_total_limit_up_reason_dict.get(code) - # 浠婃棩娑ㄥ仠鍘熷洜鍙樺寲 - def set_today_limit_up_reason_change(self, code, from_reason, to_reason): - RedisUtils.sadd(self.__get_redis(), f"kpl_limit_up_reason_his-{code}", from_reason) - RedisUtils.expire(self.__get_redis(), f"kpl_limit_up_reason_his-{code}", tool.get_expire()) - self.__set_total_keys(code) - # 璁剧疆浠g爜鐨勪粖鏃ユ定鍋滃師鍥� def __set_total_keys(self, code): keys = set() @@ -337,6 +331,8 @@ return fresult + + # 瀹炴椂寮�鐩樺暒甯傚満鏁版嵁 class RealTimeKplMarketData: # 绮鹃�夊墠5 @@ -350,11 +346,18 @@ __KPLPlateForbiddenManager = KPLPlateForbiddenManager() __LimitUpCodesPlateKeyManager = LimitUpCodesPlateKeyManager() __KPLPlatManager = KPLPlatManager() - # 绮鹃�夊墠鍑� + # 绮鹃�夋祦鍏ュ墠鍑� __top_jx_blocks = set() + # 绮鹃�夋祦鍑哄墠鍑� + __top_jx_out_blocks = set() @classmethod def set_market_jingxuan_blocks(cls, datas): + """ + 璁剧疆绮鹃�夋祦鍏ユ暟鎹� + @param datas: + @return: + """ blocks = set() for data in datas: if data[3] <= 0: @@ -363,8 +366,34 @@ cls.__top_jx_blocks = blocks @classmethod + def set_market_jingxuan_out_blocks(cls, datas): + """ + 璁剧疆绮鹃�夋祦鍑烘暟鎹� + @param datas: + @return: + """ + blocks = set() + for i in range(0, len(datas)): + if i >= 10 and int(tool.get_now_time_str().replace(":", "")) < int("100000"): + # 10鐐瑰墠鐪嬪墠10锛屽崄鐐瑰悗涓嶇湅鍓�10 + break + data = datas[i] + if data[3] > 0 - 5e7: + # 杩囨护5鍗冧竾浠ヤ笂鐨� + break + blocks.add(kpl_util.filter_block(data[1])) + + # 璁板綍绮鹃�夋祦鍑烘棩蹇� + async_log_util.info(logger_kpl_jx_out, f"鍘熸暟鎹細{datas[:10]} 鏉垮潡锛歿blocks}") + cls.__top_jx_out_blocks = blocks + + @classmethod def get_top_market_jingxuan_blocks(cls): return cls.__top_jx_blocks + + @classmethod + def get_top_market_jingxuan_out_blocks(cls): + return cls.__top_jx_out_blocks @classmethod def set_top_5_industry(cls, datas): @@ -416,6 +445,14 @@ __history_limit_up_reason_dict = {} # 鏉垮潡 __blocks_dict = {} + + __instance = None + + def __new__(cls, *args, **kwargs): + if not cls.__instance: + cls.__instance = super(CodesHisReasonAndBlocksManager, cls).__new__(cls, *args, **kwargs) + + return cls.__instance def __get_redis(self): return self.__redisManager.getRedis() @@ -499,6 +536,14 @@ except: pass return set() + + def get_history_blocks_cache(self, code): + """ + 鑾峰彇180澶╃殑鍘嗗彶娑ㄥ仠鍘熷洜缂撳瓨 + @param code: + @return: + """ + return self.__history_blocks_dict_cache.get(code) # 鐩爣浠g爜鏉垮潡鍏抽敭璇嶇鐞� @@ -878,7 +923,8 @@ current_limit_up_datas = [] # 鑾峰彇鐩爣浠g爜鏉垮潡 - keys, k1, k11, k2, k3, k4 = cls.__TargetCodePlateKeyManager.get_plate_keys(code) + # keys, k1, k11, k2, k3, k4 = cls.__TargetCodePlateKeyManager.get_plate_keys(code) + keys, k1 = RadicalBuyBlockManager.get_code_blocks(code) # log.logger_kpl_debug.info("{}鏈�缁堝叧閿瘝锛歿}", code, keys) @@ -887,6 +933,7 @@ fresults = [] if not keys: return fresults, set() + code_limit_up_reasons_dict = {} load_code_block() for block in keys: @@ -1059,7 +1106,7 @@ class RadicalBuyBlockManager: """ - 婵�杩涗拱鏉垮潡绠$悊 + 鎵叆涔版澘鍧楃鐞� """ __TargetCodePlateKeyManager = TargetCodePlateKeyManager() # 涓婃鐨勬定鍋滀唬鐮� @@ -1152,6 +1199,10 @@ limit_up_time = time.time() for k in LimitUpDataConstant.current_limit_up_datas: _code = k[0] + # 鍓旈櫎4鏉夸互涓婄殑鏉� + if kpl_util.get_high_level_count(k[4]) >= 4: + continue + if _code in exclude_codes: continue blocks = LimitUpDataConstant.get_blocks_with_history(_code) @@ -1207,6 +1258,11 @@ limit_up_space_ge_60s_codes = set() for k in LimitUpDataConstant.history_limit_up_datas: _code = k[3] + + # 鍓旈櫎4鏉夸互涓婄殑鏉� + if kpl_util.get_high_level_count(k[12]) >= 4: + continue + if _code in exclude_codes: continue blocks = LimitUpDataConstant.get_blocks_with_history(_code) @@ -1311,8 +1367,8 @@ if RedicalBuyDataManager.can_buy(history_before_codes_info[0][0], DealAndDelegateWithBuyModeDataManager().get_deal_codes())[0]: return False, f"寮�1鏁伴噺锛歿count}锛屽墠鎺掍唬鐮佸彲涔帮細{history_before_codes_info[0]}" - return True, f"寮�1鏁伴噺锛歿count}锛屽墠鎺掍唬鐮佷笉鍙拱锛歿history_before_codes_info[0]}" - return True, f"寮�1鏁伴噺锛歿count}锛屽巻鍙�-{history_index + 1} 瀹炴椂-{current_index + 1}" + return True, f"寮�1鏁伴噺锛歿count}锛屽墠鎺掍唬鐮佷笉鍙拱锛歿history_before_codes_info[0]}锛屽巻鍙插墠鎺�-{history_before_codes_info}锛屽紑1浠g爜-{open_limit_up_block_codes}" + return True, f"寮�1鏁伴噺锛歿count}锛屽巻鍙�-{history_index + 1} 瀹炴椂-{current_index + 1}锛� 鍓嶆帓浠g爜-{current_before_codes_info}, 寮�1浠g爜-{open_limit_up_block_codes}" @classmethod def __is_radical_buy_with_block_up(cls, code, block, yesterday_limit_up_codes): @@ -1393,12 +1449,12 @@ else: # 璺濈涓婁釜浠g爜娑ㄥ仠5鍒嗛挓浠ュ唴 if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'), - tool.timestamp_format(current_before_codes_info[-1][1], '%H:%M:%S')) >= 5 * 60: - return False, f"璺濈涓婁釜浠g爜娑ㄥ仠宸茶繃鍘�5鍒嗛挓锛坽current_before_codes_info[-1]}锛�" + tool.timestamp_format(current_before_codes_info[-1][1], '%H:%M:%S')) >= 10 * 60: + return False, f"璺濈涓婁釜浠g爜娑ㄥ仠宸茶繃鍘�10鍒嗛挓锛坽current_before_codes_info[-1]}锛�" else: if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'), - tool.timestamp_format(current_before_codes_info[-1][1], '%H:%M:%S')) >= 5 * 60: - return False, f"璺濈涓婁釜浠g爜娑ㄥ仠宸茶繃鍘�5鍒嗛挓锛坽current_before_codes_info[-1]}锛�" + tool.timestamp_format(current_before_codes_info[-1][1], '%H:%M:%S')) >= 10 * 60: + return False, f"璺濈涓婁釜浠g爜娑ㄥ仠宸茶繃鍘�10鍒嗛挓锛坽current_before_codes_info[-1]}锛�" return True, f"婊¤冻涔板叆闇�姹�: 鍓嶆帓浠g爜-{current_before_codes_info}" @@ -1487,6 +1543,13 @@ if match_blocks_3: match_blocks_3 -= constant.KPL_INVALID_BLOCKS fblocks |= match_blocks_3 + # 鑾峰彇寮�鐩樺暒鍘嗗彶娑ㄥ仠鍘熷洜 + kpl_history_blocks = CodesHisReasonAndBlocksManager().get_history_blocks_cache(code) + if kpl_history_blocks: + fblocks |= BlockMapManager().filter_blocks(kpl_history_blocks) + jx_out_blocks = RealTimeKplMarketData.get_top_market_jingxuan_out_blocks() + if jx_out_blocks: + fblocks -= jx_out_blocks return fblocks, match_blocks -- Gitblit v1.8.0