| | |
| | | |
| | | # 代码实时价格管理器 |
| | | class CodeActualPriceProcessor: |
| | | __redisManager = redis_manager.RedisManager(0) |
| | | __instance = None |
| | | |
| | | def __new__(cls, *args, **kwargs): |
| | | if not cls.__instance: |
| | | cls.__instance = super(CodeActualPriceProcessor, cls).__new__(cls, *args, **kwargs) |
| | | # 初始化设置 |
| | | # 获取交易窗口的锁 |
| | | cls.__instance.__redisManager = redis_manager.RedisManager(0) |
| | | cls.__instance.__under_water_last_time_cache = {} |
| | | cls.__instance.__code_current_rate_cache = {} |
| | | |
| | | return cls.__instance |
| | | |
| | | def __get_redis(self): |
| | | return self.__redisManager.getRedis() |
| | |
| | | # 保存跌价的时间 |
| | | def __save_down_price_time(self, code, time_str): |
| | | key = "under_water_last_time-{}".format(code) |
| | | tool.CodeDataCacheUtil.set_cache(self.__under_water_last_time_cache, code, time_str) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), time_str) |
| | | |
| | | def __remove_down_price_time(self, code): |
| | | key = "under_water_last_time-{}".format(code) |
| | | tool.CodeDataCacheUtil.clear_cache(self.__under_water_last_time_cache, code) |
| | | RedisUtils.delete(self.__get_redis(), key) |
| | | |
| | | def __get_last_down_price_time(self, code): |
| | | key = "under_water_last_time-{}".format(code) |
| | | return RedisUtils.get(self.__get_redis(), key) |
| | | |
| | | def __get_last_down_price_time_cache(self, code): |
| | | cache_result = tool.CodeDataCacheUtil.get_cache(self.__under_water_last_time_cache, code) |
| | | if cache_result[0]: |
| | | return cache_result[1] |
| | | val = self.__get_last_down_price_time(code) |
| | | tool.CodeDataCacheUtil.set_cache(self.__under_water_last_time_cache, code, val) |
| | | return val |
| | | |
| | | def __increment_down_price_time(self, code, seconds): |
| | | key = "under_water_seconds-{}".format(code) |
| | |
| | | |
| | | # 保存当前涨幅 |
| | | def __save_current_rate(self, code, rate): |
| | | tool.CodeDataCacheUtil.set_cache(self.__code_current_rate_cache, code, rate) |
| | | key = "code_current_rate-{}".format(code) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), rate) |
| | | |
| | |
| | | return None |
| | | |
| | | def get_current_rate(self, code): |
| | | return self.__get_current_rate(code) |
| | | cache_result = tool.CodeDataCacheUtil.get_cache(self.__code_current_rate_cache, code) |
| | | if cache_result[0]: |
| | | return cache_result[1] |
| | | val = self.__get_current_rate(code) |
| | | tool.CodeDataCacheUtil.set_cache(self.__code_current_rate_cache, code, val) |
| | | return val |
| | | |
| | | def process_rate(self, code, rate, time_str): |
| | | # 保存目前的代码涨幅 |
| | |
| | | return |
| | | # now_str = tool.get_now_time_str() |
| | | if rate >= 0: |
| | | down_start_time = self.__get_last_down_price_time(code) |
| | | down_start_time = self.__get_last_down_price_time_cache(code) |
| | | if down_start_time is None: |
| | | return |
| | | else: |
| | |
| | | self.__remove_down_price_time(code) |
| | | else: |
| | | # 记录开始值 |
| | | if self.__get_last_down_price_time(code) is None: |
| | | if self.__get_last_down_price_time_cache(code) is None: |
| | | self.__save_down_price_time(code, time_str) |
| | | |
| | | # 保存现价 |
| | |
| | | infos = [] |
| | | for k in keys: |
| | | code = k.split("-")[1] |
| | | rate = self.__get_current_rate(code) |
| | | rate = self.get_current_rate(code) |
| | | infos.append((code, rate)) |
| | | # 排序信息 |
| | | sorted_infos = sorted(infos, key=lambda tup: tup[1], reverse=True) |