From 781aa4e0af5a29d39c63f022404e93570248c5b9 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期二, 28 十一月 2023 14:42:58 +0800 Subject: [PATCH] 精选板块获取修改 --- third_data/code_plate_key_manager.py | 56 +++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 43 insertions(+), 13 deletions(-) diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py index 7fe0f9d..a48d004 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): @@ -86,10 +97,29 @@ # 濡傛灉娑ㄥ箙澶т簬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): + 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: + # 闈炴定鍋滅姸鎬� + 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) + elif price_rate > 0.03: # 娣诲姞澶囩敤鏉垮潡 if not self.get_jx_blocks_cache(code, by=True): @@ -410,11 +440,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