Administrator
2023-01-02 ed9e2367eea9baa6c8bea82e0f81c209ffb2a56f
trade_data_manager.py
@@ -210,7 +210,22 @@
        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
@@ -261,11 +276,55 @@
            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))