From 49f952cfa1dbc5bedaa8a2e136a662bae50aecc1 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期三, 29 十一月 2023 11:14:38 +0800 Subject: [PATCH] bug修改 --- third_data/code_plate_key_manager.py | 92 ++++++++++++++++++++++++++++++++-------------- 1 files changed, 64 insertions(+), 28 deletions(-) diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py index 7fe0f9d..51af9d3 100644 --- a/third_data/code_plate_key_manager.py +++ b/third_data/code_plate_key_manager.py @@ -3,7 +3,9 @@ """ # 娑ㄥ仠浠g爜鍏抽敭璇嶆澘鍧楃鐞� +import copy import json +import time import constant from db.redis_manager_delegate import RedisUtils @@ -35,19 +37,28 @@ def __get_redis(self): return self.__redisManager.getRedis() - def save_jx_blocks(self, code, blocks, by=False): - if blocks is None: + def save_jx_blocks(self, code, blocks: list, by=False): + if not blocks: return + final_blocks = copy.deepcopy(blocks) if len(blocks) > 2: - blocks = blocks[:2] + final_blocks.clear() + # 鏍规嵁娑ㄥ箙鎺掑簭 + blocks.sort(key=lambda x: x[2]) + blocks.reverse() + for b in blocks: + if b[2] > 0 and b[1] not in constant.KPL_INVALID_BLOCKS: + final_blocks.append(b) + if len(final_blocks) < 2: + final_blocks = blocks # 淇濆瓨鍓�2鏉℃暟鎹� if by: - RedisUtils.setex_async(self.__db, f"kpl_jx_blocks_by-{code}", tool.get_expire(), json.dumps(blocks)) - self.__code_by_blocks[code] = blocks + RedisUtils.setex_async(self.__db, f"kpl_jx_blocks_by-{code}", tool.get_expire(), json.dumps(final_blocks)) + self.__code_by_blocks[code] = (final_blocks, time.time()) else: - RedisUtils.setex_async(self.__db, f"kpl_jx_blocks-{code}", tool.get_expire(), json.dumps(blocks)) - self.__code_blocks[code] = blocks + RedisUtils.setex_async(self.__db, f"kpl_jx_blocks-{code}", tool.get_expire(), json.dumps(final_blocks)) + self.__code_blocks[code] = (final_blocks, time.time()) # 鑾峰彇绮鹃�夋澘鍧� def get_jx_blocks(self, code, by=False): @@ -80,22 +91,47 @@ # 浠庣綉缁滀笂鍔犺浇绮鹃�夋澘鍧� def load_jx_blocks(self, code, buy_1_price, limit_up_price): - if limit_up_price and buy_1_price: - # 澶勭悊涔�1,鍗�1淇℃伅 - pre_close_price = round(float(limit_up_price) / 1.1, 2) - # 濡傛灉娑ㄥ箙澶т簬7%灏辫鍙栨澘鍧� - price_rate = (buy_1_price - pre_close_price) / pre_close_price - if price_rate > 0.07: - if not self.get_jx_blocks_cache(code): - blocks = kpl_api.getCodeJingXuanBlocks(code) - self.save_jx_blocks(code, blocks) - async_log_util.info(logger_kpl_block_can_buy, f"{code}:鑾峰彇鍒扮簿閫夋澘鍧�-{blocks}") - elif price_rate > 0.03: - # 娣诲姞澶囩敤鏉垮潡 - if not self.get_jx_blocks_cache(code, by=True): - blocks = kpl_api.getCodeJingXuanBlocks(code) - self.save_jx_blocks(code, blocks, by=True) - async_log_util.info(logger_kpl_block_can_buy, f"{code}:鑾峰彇鍒扮簿閫夋澘鍧�(澶囩敤)-{blocks}") + try: + logger_kpl_block_can_buy.info(f"鍑嗗鏇存柊绮鹃�夋澘鍧楋細{code}-{buy_1_price}-{limit_up_price}") + if limit_up_price and buy_1_price: + # 澶勭悊涔�1,鍗�1淇℃伅 + pre_close_price = round(float(limit_up_price) / 1.1, 2) + # 濡傛灉娑ㄥ箙澶т簬7%灏辫鍙栨澘鍧� + price_rate = (buy_1_price - pre_close_price) / pre_close_price + if price_rate > 0.07: + jx_blocks_info = self.get_jx_blocks_cache(code) + if not jx_blocks_info: + blocks = kpl_api.getCodeJingXuanBlocks(code) + self.save_jx_blocks(code, blocks) + async_log_util.info(logger_kpl_block_can_buy, f"{code}:鑾峰彇鍒扮簿閫夋澘鍧�-{blocks}") + else: + # 杩樻病娑ㄥ仠鐨勯渶瑕佹洿鏂扮簿閫夋澘鍧� 鏇存柊绮鹃�夋澘鍧� + if abs(float(buy_1_price) - float(limit_up_price)) >= 0.001 or True: + # 闈炴定鍋滅姸鎬� + UPDATE_TIME_SPACE = 5 * 60 + time_diff = tool.trade_time_sub(tool.get_now_time_str(), "09:30:00") + if time_diff < 0: + UPDATE_TIME_SPACE = 60 * 60 + else: + UPDATE_TIME_SPACE = int(time_diff / 30) + 60 + if UPDATE_TIME_SPACE > 5 * 60: + UPDATE_TIME_SPACE = 5 * 60 + + if time.time() - jx_blocks_info[1] > UPDATE_TIME_SPACE: + # 璺濈涓婃鏇存柊鏃堕棿杩囧幓浜�5鍒嗛挓 + blocks = kpl_api.getCodeJingXuanBlocks(code) + self.save_jx_blocks(code, blocks) + async_log_util.info(logger_kpl_block_can_buy, f"{code}:鑾峰彇鍒扮簿閫夋澘鍧楋紙鏇存柊锛�-{blocks}") + + elif price_rate > 0.03: + # 娣诲姞澶囩敤鏉垮潡 + if not self.get_jx_blocks_cache(code, by=True): + blocks = kpl_api.getCodeJingXuanBlocks(code) + self.save_jx_blocks(code, blocks, by=True) + async_log_util.info(logger_kpl_block_can_buy, f"{code}:鑾峰彇鍒扮簿閫夋澘鍧�(澶囩敤)-{blocks}") + except Exception as e: + logger_kpl_block_can_buy.error(f"{code} 鑾峰彇鏉垮潡鍑洪敊") + logger_kpl_block_can_buy.exception(e) # 寮�鐩樺暒绂佹浜ゆ槗鏉垮潡绠$悊 @@ -410,11 +446,11 @@ k3 = {industry} k4 = set() - jingxuan_blocks = self.__KPLCodeJXBlockManager.get_jx_blocks_cache(code) - if not jingxuan_blocks: - jingxuan_blocks = self.__KPLCodeJXBlockManager.get_jx_blocks_cache(code, by=True) - if jingxuan_blocks: - jingxuan_blocks = jingxuan_blocks[:2] + jingxuan_block_info = self.__KPLCodeJXBlockManager.get_jx_blocks_cache(code) + if not jingxuan_block_info: + jingxuan_block_info = self.__KPLCodeJXBlockManager.get_jx_blocks_cache(code, by=True) + if jingxuan_block_info: + jingxuan_blocks = jingxuan_block_info[0] k4 |= set([x[1] for x in jingxuan_blocks]) for k in [k1, k11, k2, k3, k4]: keys |= k -- Gitblit v1.8.0