| | |
| | | count = self.__get_redis().get(key) |
| | | return 0 if count is None else count |
| | | |
| | | # 保存当前涨幅 |
| | | def __save_current_rate(self, code, rate): |
| | | key = "code_current_rate-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), rate) |
| | | |
| | | # 获取当前涨幅 |
| | | def __get_current_rate(self, code): |
| | | key = "code_current_rate-{}".format(code) |
| | | rate = self.__get_redis().get(key) |
| | | if rate is not None: |
| | | return float(rate) |
| | | return None |
| | | |
| | | def process_rate(self, code, rate, time_str): |
| | | # 保存目前的代码涨幅 |
| | | self.__save_current_rate(code, rate) |
| | | # 9点半之前的数据不处理 |
| | | if int(time_str.replace(":", "")) < int("093000"): |
| | | return |
| | |
| | | return None |
| | | return data[1] |
| | | |
| | | # 获取涨幅前几的代码 |
| | | def get_top_rate_codes(self, top_n): |
| | | keys = "code_current_rate-*" |
| | | keys = self.__get_redis().keys(keys) |
| | | infos = [] |
| | | for k in keys: |
| | | code = k.split("-")[1] |
| | | rate = self.__get_current_rate(code) |
| | | infos.append((code, rate)) |
| | | # 排序信息 |
| | | sorted_infos = sorted(infos, key=lambda tup: tup[1], reverse=True) |
| | | sorted_infos = sorted_infos[:top_n] |
| | | codes = [] |
| | | for data in sorted_infos: |
| | | codes.append(data[0]) |
| | | return codes |
| | | |
| | | |
| | | # 涨停次数管理 |
| | | class placeordercountmanager: |
| | | __redisManager = redis_manager.RedisManager(0) |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.__redisManager.getRedis() |
| | | |
| | | @classmethod |
| | | def __incre_place_order_count(cls, code): |
| | | key = "place_order_count-{}".format(code) |
| | | cls.__get_redis().incrby(key, 1) |
| | | cls.__get_redis().expire(key, tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def __get_place_order_count(cls, code): |
| | | key = "place_order_count-{}".format(code) |
| | | count = cls.__get_redis().get(key) |
| | | if count is not None: |
| | | return int(count) |
| | | return 0 |
| | | |
| | | @classmethod |
| | | def place_order(cls, code): |
| | | cls.__incre_place_order_count(code) |
| | | |
| | | @classmethod |
| | | def get_place_order_count(cls, code): |
| | | return cls.__get_place_order_count(code) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | processor = CodeActualPriceProcessor() |
| | | processor.process_rate("123456", -0.2, "09:30:00") |
| | | processor.process_rate("123456", -0.3, "09:40:00") |
| | | processor.process_rate("123456", 0.3, "09:50:00") |
| | | |
| | | processor.is_under_water("123456") |
| | | print(processor.get_top_rate_codes(30)) |