| | |
| | | |
| | | @classmethod |
| | | def get_k_format(cls, code): |
| | | val = cls.__get_redis().get(f"k_format-{code}") |
| | | val = RedisUtils.get(cls.__get_redis(), f"k_format-{code}") |
| | | if val: |
| | | return json.loads(val) |
| | | return None |
| | |
| | | |
| | | @classmethod |
| | | def get_nature(cls, code): |
| | | val = cls.__get_redis().get(f"code_nature-{code}") |
| | | val = RedisUtils.get(cls.__get_redis(), f"code_nature-{code}") |
| | | if val: |
| | | return json.loads(val) |
| | | return None |
| | |
| | | # 设置首板代码名称 |
| | | @classmethod |
| | | def set_first_code_names(cls, datas): |
| | | cls.__get_redis().set("gp_list_names_first", json.dumps(datas)) |
| | | RedisUtils.set( cls.__get_redis(), "gp_list_names_first", json.dumps(datas)) |
| | | |
| | | # 设置二板代码名称 |
| | | @classmethod |
| | | def set_second_code_names(cls, datas): |
| | | cls.__get_redis().set("gp_list_names", json.dumps(datas)) |
| | | RedisUtils.set(cls.__get_redis(), "gp_list_names", json.dumps(datas)) |
| | | |
| | | # 删除首板代码名称 |
| | | @classmethod |
| | |
| | | |
| | | @classmethod |
| | | def is_in_first_record(cls, code): |
| | | if cls.__get_redis().sismember("first_code_record", code): |
| | | if RedisUtils.sismember( cls.__get_redis(), "first_code_record", code): |
| | | return True |
| | | else: |
| | | return False |
| | |
| | | # 是否涨停过 |
| | | @classmethod |
| | | def is_limited_up(cls, code): |
| | | if cls.__get_redis().sismember("first_code_limited_up_record", code): |
| | | if RedisUtils.sismember( cls.__get_redis(), "first_code_limited_up_record", code): |
| | | return True |
| | | else: |
| | | return False |
| | |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | | cls.__get_redis().srem(cls.__redis_key, code) |
| | | RedisUtils.srem( cls.__get_redis(),cls.__redis_key, code) |
| | | |
| | | @classmethod |
| | | def is_in(cls, code): |
| | | return cls.__get_redis().sismember(cls.__redis_key, code) |
| | | return RedisUtils.sismember( cls.__get_redis(), cls.__redis_key, code) |
| | | |
| | | @classmethod |
| | | def list_code(cls): |
| | |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | | cls.__get_redis().srem(cls.__redis_key, code) |
| | | RedisUtils.srem(cls.__get_redis(), cls.__redis_key, code) |
| | | |
| | | @classmethod |
| | | def is_in(cls, code): |
| | | return cls.__get_redis().sismember(cls.__redis_key, code) |
| | | return RedisUtils.sismember( cls.__get_redis(), cls.__redis_key, code) |
| | | |
| | | @classmethod |
| | | def list_code(cls): |
| | |
| | | # 设置模块 |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | |
| | | __redis_manager = redis_manager.RedisManager(2) |
| | | |
| | |
| | | |
| | | |
| | | def is_accept_l2_data(): |
| | | val = __get_redis().get("not_accpt_l2_data") |
| | | val = RedisUtils.get(__get_redis(), "not_accpt_l2_data") |
| | | if val is None: |
| | | return True |
| | | else: |
| | |
| | | |
| | | def set_accept_l2_data(val): |
| | | if val: |
| | | __get_redis().set("not_accpt_l2_data", 0) |
| | | RedisUtils.set( |
| | | __get_redis(),"not_accpt_l2_data", 0) |
| | | else: |
| | | __get_redis().set("not_accpt_l2_data", 1) |
| | | RedisUtils.set( |
| | | __get_redis(),"not_accpt_l2_data", 1) |
| | |
| | | return redis_.sadd(key, val) |
| | | |
| | | @classmethod |
| | | def sismember(cls, redis_, key, val): |
| | | return redis_.sismember(key, val) |
| | | |
| | | @classmethod |
| | | def smembers(cls, redis_, key): |
| | | return redis_.smembers(key) |
| | | |
| | | @classmethod |
| | | def srem(cls, redis_, key, val): |
| | | return redis_.srem(key, val) |
| | | |
| | | @classmethod |
| | | def incrby(cls, redis_, key, num): |
| | | return redis_.incrby(key, num) |
| | | |
| | | @classmethod |
| | | def lpush(cls, redis_, key, val): |
| | | return redis_.lpush(key, val) |
| | | |
| | | @classmethod |
| | | def lpop(cls, redis_, key): |
| | | return redis_.lpop(key) |
| | | |
| | | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | pass |
| | |
| | | |
| | | @classmethod |
| | | def __get_real_order_index(cls, code): |
| | | val = cls.__get_redis().get(f"d_cancel_real_order_index-{code}") |
| | | val = RedisUtils.get(cls.__get_redis(), f"d_cancel_real_order_index-{code}") |
| | | if val: |
| | | return int(val) |
| | | return None |
| | |
| | | def __add_watch_index(cls, code, index): |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_watch_index_cache, code) |
| | | RedisUtils.sadd(cls.__get_redis(), f"l_cancel_watch_index-{code}", index) |
| | | cls.__get_redis().expire(f"l_cancel_watch_index-{code}", tool.get_expire()) |
| | | RedisUtils.expire(cls.__get_redis(), f"l_cancel_watch_index-{code}", tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def __del_watch_index(cls, code, index): |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_watch_index_cache, code) |
| | | cls.__get_redis().srem(f"l_cancel_watch_index-{code}", index) |
| | | RedisUtils.srem(cls.__get_redis(), f"l_cancel_watch_index-{code}", index) |
| | | |
| | | @classmethod |
| | | def __get_watch_indexes(cls, code): |
| | |
| | | @classmethod |
| | | def __get_l2_second_money_record(cls, code, time): |
| | | key = "l2_limit_up_second_money-{}-{}".format(code, time.replace(":", "")) |
| | | val = cls.__get_redis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | return cls.__format_second_money_record_val(val) |
| | | |
| | | @classmethod |
| | |
| | | @classmethod |
| | | def __get_l2_latest_money_record(cls, code): |
| | | key = "l2_limit_up_money-{}".format(code) |
| | | result = cls.__get_redis().get(key) |
| | | result = RedisUtils.get(cls.__get_redis(), key) |
| | | if result: |
| | | result = json.loads(result) |
| | | return result[0], result[1] |
| | |
| | | keys.sort(key=lambda tup: int(tup.split("-")[-1])) |
| | | if len(keys) > 0: |
| | | key = keys[0] |
| | | val = cls.__get_redis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | old_num, old_from, old_to = cls.__format_second_money_record_val(val) |
| | | end_index = old_to |
| | | # 保存最近的数据 |
| | |
| | | @classmethod |
| | | def __incre_sell_data(cls, code, num): |
| | | key = "limit_up_sell_num-{}".format(code) |
| | | cls.__get_redis().incrby(key, num) |
| | | RedisUtils.incrby( cls.__get_redis(),key, num) |
| | | |
| | | @classmethod |
| | | def __get_sell_data(cls, code): |
| | | key = "limit_up_sell_num-{}".format(code) |
| | | val = cls.__get_redis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | if val is None: |
| | | return 0 |
| | | return int(val) |
| | |
| | | @classmethod |
| | | def __get_process_index(cls, code): |
| | | key = "limit_up_sell_index-{}".format(code) |
| | | val = cls.__get_redis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | if val is None: |
| | | return -1 |
| | | return int(val) |
| | |
| | | |
| | | @classmethod |
| | | def __get_buy1_price_info(cls, code): |
| | | data = cls.__get_redis().get(f"buy1_price_limit_up_info-{code}") |
| | | data = RedisUtils.get(cls.__get_redis(), f"buy1_price_limit_up_info-{code}") |
| | | if not data: |
| | | return None, None |
| | | data = json.loads(data) |
| | |
| | | |
| | | @classmethod |
| | | def __get_buy1_price(cls, code): |
| | | return cls.__get_redis().get(f"buy1_price-{code}") |
| | | return RedisUtils.get(cls.__get_redis(), f"buy1_price-{code}") |
| | | |
| | | # 设置炸板后的最低价 |
| | | @classmethod |
| | |
| | | |
| | | @classmethod |
| | | def __get_open_limit_up_lowest_price(cls, code): |
| | | return cls.__get_redis().get(f"open_limit_up_lowest_price-{code}") |
| | | return RedisUtils.get(cls.__get_redis(), f"open_limit_up_lowest_price-{code}") |
| | | |
| | | @classmethod |
| | | def set_open_limit_up_lowest_price(cls, code, price): |
| | |
| | | # 返回数据与更新时间 |
| | | def __get_buy_queue_data(self, code): |
| | | key = "trade_buy_queue_data-{}".format(code) |
| | | val = self.__getRedis().get(key) |
| | | val = RedisUtils.get(self.__getRedis(), key) |
| | | if val is None: |
| | | return None, None |
| | | val = json.loads(val) |
| | |
| | | |
| | | def __get_buy_progress_index(self, code): |
| | | key = "trade_buy_progress_index-{}".format(code) |
| | | val = self.__getRedis().get(key) |
| | | val = RedisUtils.get(self.__getRedis(), key) |
| | | if val is None: |
| | | return None, True |
| | | val = json.loads(val) |
| | |
| | | def __get_latest_not_limit_up_time(self, code): |
| | | key = "latest_not_limit_up_time-{}".format(code) |
| | | if not constant.TEST: |
| | | return self.__getRedis().get(key) |
| | | return RedisUtils.get(self.__getRedis(), key) |
| | | return None |
| | | |
| | | # 保存数据,返回保存数据的条数 |
| | |
| | | |
| | | from code_attribute import gpcode_manager |
| | | from log_module import log |
| | | from db.redis_manager import RedisManager |
| | | from db.redis_manager import RedisManager, RedisUtils |
| | | from log_module.log import logger_kp_msg |
| | | |
| | | CLIENT_IDS = ["zjb", "hxh"] |
| | |
| | | |
| | | # 添加消息,2s内有效 |
| | | def add_msg(self, client_id, msg): |
| | | self.__get_redis().lpush(f"kp_msg_queue-{client_id}", json.dumps((time.time() + 2, msg))) |
| | | RedisUtils.lpush( |
| | | self.__get_redis(),f"kp_msg_queue-{client_id}", json.dumps((time.time() + 2, msg))) |
| | | |
| | | # 读取消息 |
| | | def read_msg(self, client_id): |
| | | data = self.__get_redis().lpop(f"kp_msg_queue-{client_id}") |
| | | data =RedisUtils.lpop(self.__get_redis(), f"kp_msg_queue-{client_id}") |
| | | if not data: |
| | | return None |
| | | data = json.loads(data) |
| | |
| | | # 今日涨停原因变化 |
| | | def set_today_limit_up_reason_change(self, code, from_reason, to_reason): |
| | | RedisUtils.sadd(self.__get_redis(), f"kpl_limit_up_reason_his-{code}", from_reason) |
| | | self.__get_redis().expire(f"kpl_limit_up_reason_his-{code}", tool.get_expire()) |
| | | RedisUtils.expire(self.__get_redis(), f"kpl_limit_up_reason_his-{code}", tool.get_expire()) |
| | | self.__set_total_keys(code) |
| | | |
| | | # 设置代码的今日涨停原因 |
| | |
| | | reasons = self.__history_limit_up_reason_dict.get(code) |
| | | if reasons is None: |
| | | # 从内存中加载 |
| | | val = self.__get_redis().get(f"kpl_his_limit_up_reason-{code}") |
| | | val = RedisUtils.get(self.__get_redis(), f"kpl_his_limit_up_reason-{code}") |
| | | if val is not None: |
| | | val = set(json.loads(val)) |
| | | self.__history_limit_up_reason_dict[code] = val |
| | |
| | | reasons = self.__blocks_dict.get(code) |
| | | if reasons is None: |
| | | # 从内存中加载 |
| | | val = self.__get_redis().get(f"kpl_blocks-{code}") |
| | | val = RedisUtils.get(self.__get_redis(), f"kpl_blocks-{code}") |
| | | if val is not None: |
| | | val = set(json.loads(val)) |
| | | self.__blocks_dict[code] = val |
| | |
| | | RedisUtils.setex(cls.getRedis(),"code-operate_state-{}-{}".format(client_id, channel), 10, state) |
| | | |
| | | def get_operate_code_state(self, client_id, channel): |
| | | value = self.getRedis().get("code-operate_state-{}-{}".format(client_id, channel)) |
| | | value = RedisUtils.get(self.getRedis(), "code-operate_state-{}-{}".format(client_id, channel)) |
| | | if value is not None: |
| | | return int(value) |
| | | return value |
| | |
| | | |
| | | |
| | | def __get_health_state(client_id, pos): |
| | | val = __get_redis().get(f"l2_pos_health_state-{client_id}-{pos}") |
| | | val = RedisUtils.get(__get_redis(), f"l2_pos_health_state-{client_id}-{pos}") |
| | | if val is None: |
| | | return UN_KNOWN |
| | | return int(val) |
| | |
| | | |
| | | # 获取竞价金额 |
| | | def get_bidding_money(code) -> object: |
| | | val = __get_redis().get("bidding_money") |
| | | val = RedisUtils.get(__get_redis(), "bidding_money") |
| | | if not val: |
| | | return None |
| | | vals = json.loads(val) |
| | |
| | | |
| | | # 获取成交计算进度 |
| | | def __get_deal_compute_progress(code): |
| | | val = __get_redis().get(f"deal_compute_info-{code}") |
| | | val = RedisUtils.get(__get_redis(), f"deal_compute_info-{code}") |
| | | if val is None: |
| | | return -1, 0 |
| | | val = json.loads(val) |
| | |
| | | |
| | | @classmethod |
| | | def get_code_volume(cls, code): |
| | | val = cls.__get_redis().get(f"available_position_{code}") |
| | | val = RedisUtils.get(cls.__get_redis(), f"available_position_{code}") |
| | | if not val: |
| | | return 0 |
| | | return int(val) |
| | |
| | | |
| | | @classmethod |
| | | def get_data(cls): |
| | | val = cls.get_redis().get("huaxin_money") |
| | | val = RedisUtils.get( cls.get_redis(), "huaxin_money") |
| | | if not val: |
| | | return None |
| | | return json.loads(val) |
| | |
| | | |
| | | try: |
| | | # 验证redis |
| | | redis_manager.RedisManager(0).getRedis().get("test") |
| | | RedisUtils.get(redis_manager.RedisManager(0).getRedis(),"test") |
| | | fdata["redis"] = 1 |
| | | except: |
| | | fdata["redis"] = 0 |
| | |
| | | # 删除订单ID |
| | | @classmethod |
| | | def remove_order_id(cls, code, account_id, order_id): |
| | | cls.__get_redis().srem(f"huaxin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | RedisUtils.srem(cls.__get_redis(), f"huaxin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | |
| | | # 查询所有的订单号 |
| | | @classmethod |
| | |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | | cls.__get_redis().srem("white_list_codes", code) |
| | | RedisUtils.srem(cls.__get_redis(), "white_list_codes", code) |
| | | |
| | | @classmethod |
| | | def is_in(cls, code): |
| | | return cls.__get_redis().sismember("white_list_codes", code) |
| | | return RedisUtils.sismember( cls.__get_redis(), "white_list_codes", code) |
| | | |
| | | @classmethod |
| | | def list_codes(cls): |
| | |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | | cls.__get_redis().srem("forbidden-trade-codes", code) |
| | | RedisUtils.srem(cls.__get_redis(), "forbidden-trade-codes", code) |
| | | |
| | | @classmethod |
| | | def is_in(cls, code): |
| | | return cls.__get_redis().sismember("forbidden-trade-codes", code) |
| | | return RedisUtils.sismember( cls.__get_redis(), "forbidden-trade-codes", code) |
| | | |
| | | @classmethod |
| | | def list_codes(cls): |
| | |
| | | |
| | | def __increment_down_price_time(self, code, seconds): |
| | | key = "under_water_seconds-{}".format(code) |
| | | self.__get_redis().incrby(key, seconds) |
| | | RedisUtils.incrby( |
| | | self.__get_redis(),key, seconds) |
| | | # 设置个失效时间 |
| | | RedisUtils.expire(self.__get_redis(), key, tool.get_expire()) |
| | | |
| | |
| | | @classmethod |
| | | def __incre_place_order_count(cls, code): |
| | | key = "place_order_count-{}".format(code) |
| | | cls.__get_redis().incrby(key, 1) |
| | | RedisUtils.incrby(cls.__get_redis(), key, 1) |
| | | RedisUtils.expire(cls.__get_redis(), key, tool.get_expire()) |
| | | |
| | | @classmethod |
| | |
| | | @classmethod |
| | | def __get_code_win(cls, code): |
| | | key = "buywin_distribute-{}".format(code) |
| | | win = cls.__get_redis().get(key) |
| | | win = RedisUtils.get(cls.__get_redis(), key) |
| | | if win is not None: |
| | | return int(win) |
| | | return None |
| | |
| | | raise Exception("必须要有一个买入窗口") |
| | | win_set = set(win_list) |
| | | for k in keys: |
| | | win = int(cls.__get_redis().get(k)) |
| | | win = int(RedisUtils.get(cls.__get_redis(),k)) |
| | | if win in win_set: |
| | | win_set.remove(win) |
| | | if len(win_set) > 0: |
| | |
| | | results = [] |
| | | for k in keys: |
| | | code = k.split("-")[-1] |
| | | win = cls.__get_redis().get(k) |
| | | win = RedisUtils.get(cls.__get_redis(), k) |
| | | results.append((code, win)) |
| | | return results |
| | | |
| | |
| | | # 删除订单ID |
| | | @classmethod |
| | | def remove_order_id(cls, code, account_id, order_id): |
| | | cls.__get_redis().srem(f"huaxin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | RedisUtils.srem(cls.__get_redis(), f"huaxin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | |
| | | # 查询所有的订单号 |
| | | @classmethod |
| | |
| | | @classmethod |
| | | def add_order_id(cls, code, account_id, order_id): |
| | | RedisUtils.sadd(cls.__get_redis(),f"juejin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | cls.__get_redis().expire(f"juejin_order_id-{code}", tool.get_expire()) |
| | | RedisUtils.expire(cls.__get_redis(), f"juejin_order_id-{code}", tool.get_expire()) |
| | | |
| | | # 删除订单ID |
| | | @classmethod |
| | | def remove_order_id(cls, code, account_id, order_id): |
| | | cls.__get_redis().srem(f"juejin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | RedisUtils.srem(cls.__get_redis(), f"juejin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | |
| | | # 查询所有的订单号 |
| | | @classmethod |
| | |
| | | @classmethod |
| | | def is_can_buy(cls): |
| | | # 默认设置为可交易 |
| | | val = cls.__get_redis().get("trade_buy_state") |
| | | val = RedisUtils.get(cls.__get_redis(), "trade_buy_state") |
| | | if val is None: |
| | | return True |
| | | if int(val) == 1: |
| | |
| | | @classmethod |
| | | def get_mode(cls): |
| | | # 默认设置为可交易 |
| | | val = cls.__get_redis().get("trade_buy_mode") |
| | | val = RedisUtils.get(cls.__get_redis(), "trade_buy_mode") |
| | | if val is None: |
| | | return cls.MODE_BUY_ALL |
| | | return int(val) |
| | |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | | cls.__get_redis().srem(cls.__key, code) |
| | | RedisUtils.srem(cls.__get_redis(), cls.__key, code) |
| | | |
| | | @classmethod |
| | | def is_in(cls, code): |
| | | return cls.__get_redis().sismember(cls.__key, code) |
| | | return RedisUtils.sismember( cls.__get_redis(), cls.__key, code) |
| | | |
| | | @classmethod |
| | | def clear(cls): |