From 59fba698b03a51a8da5b56a919ebbf94d4784f74 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 06 一月 2023 15:06:27 +0800 Subject: [PATCH] 买入策略修改 --- gpcode_manager.py | 142 +++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 118 insertions(+), 24 deletions(-) diff --git a/gpcode_manager.py b/gpcode_manager.py index 9a0f239..95d7d2a 100644 --- a/gpcode_manager.py +++ b/gpcode_manager.py @@ -1,24 +1,20 @@ """ 鑲$エ浠g爜绠$悊鍣� """ +import code import json import random import time -import authority -import global_util +import client_manager import redis_manager import tool -import juejin -import data_process import decimal __redisManager = redis_manager.RedisManager(0) -def set_gp_list(gpset): - # 鑾峰彇鍩烘湰淇℃伅 - code_datas = juejin.JueJinManager.get_gp_latest_info(gpset) +def __parse_codes_data(code_datas): codes = [] name_codes = {} for _data in code_datas: @@ -30,7 +26,11 @@ codes.append(code) # 淇濆瓨浠g爜瀵瑰簲鐨勫悕绉� name_codes[name] = code + return codes, name_codes + +def set_gp_list(code_datas): + codes, name_codes = __parse_codes_data(code_datas) redis_instance = __redisManager.getRedis() # 鍒犻櫎涔嬪墠鐨� redis_instance.delete("gp_list") @@ -38,6 +38,21 @@ for d in codes: redis_instance.sadd("gp_list", d) redis_instance.set("gp_list_names", json.dumps(name_codes)) + + +# 鏂板浠g爜 +def add_gp_list(code_datas): + redis_instance = __redisManager.getRedis() + codes, name_codes = __parse_codes_data(code_datas) + for d in codes: + redis_instance.sadd("gp_list", d) + old_name_codes = get_name_codes() + if old_name_codes is None: + old_name_codes = name_codes + else: + for key in name_codes: + old_name_codes[key] = name_codes[key] + redis_instance.set("gp_list_names", json.dumps(old_name_codes)) # 鑾峰彇鍚嶇О瀵瑰簲鐨勪唬鐮� @@ -48,6 +63,18 @@ return None val = json.loads(val) return val.get(name) + + +def get_code_name(code): + redis_instance = __redisManager.getRedis() + val = redis_instance.get("gp_list_names") + if not val: + return None + val = json.loads(val) + for key in val: + if val[key] == code: + return key + return None def get_name_codes(): @@ -63,8 +90,6 @@ def set_limit_up_list(gpset): if gpset is None: return - # 淇濆瓨鍒板唴瀛樹腑 - global_util.add_limit_up_codes(gpset) # 鑾峰彇鍩烘湰淇℃伅 redis_instance = __redisManager.getRedis() # 鍒犻櫎涔嬪墠鐨� @@ -126,9 +151,23 @@ redis_instance.setex("price-pre-{}".format(code), tool.get_expire(), str(price)) +__limit_up_price_dict = {} + + # 鑾峰彇娑ㄥ仠浠� def get_limit_up_price(code): + # 璇诲彇鍐呭瓨涓殑鍊� + if code in __limit_up_price_dict: + return __limit_up_price_dict[code] price = get_price_pre(code) + if price is None: + return None + limit_up_price = tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("1.1")) + __limit_up_price_dict[code] = limit_up_price + return limit_up_price + + +def get_limit_up_price_by_preprice(price): if price is None: return None return tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("1.1")) @@ -182,6 +221,39 @@ def set_listen_code_by_pos(client_id, pos, code): redis_instance = __redisManager.getRedis() redis_instance.setex("listen_code-{}-{}".format(client_id, pos), tool.get_expire(), code) + # 鍚屾鐩戝惉鐨勪唬鐮侀泦鍚� + __sync_listen_codes_pos() + + +# 鍚屾鐩戝惉浠g爜浣嶇疆淇℃伅 +def __sync_listen_codes_pos(): + redis_instance = __redisManager.getRedis() + # 鑾峰彇宸茬粡姝e湪鐩戝惉鐨勪唬鐮� + keys = redis_instance.keys("code_listen_pos-*") + codes_set = set() + for key in keys: + codes_set.add(key.replace("code_listen_pos-", "")) + + keys = redis_instance.keys("listen_code-*-*") + + for key in keys: + result = redis_instance.get(key) + if result: + # 绉婚櫎闇�瑕佹坊鍔犵殑浠g爜 + codes_set.discard(result) + client_id_, pos_, code_ = int(key.split("-")[1]), int(key.split("-")[2]), result + key_ = "code_listen_pos-{}".format(code_) + val = redis_instance.get(key_) + if val is None: + redis_instance.setex(key_, tool.get_expire(), json.dumps((client_id_, pos_))) + else: + val = json.loads(val) + if val[0] != client_id_ or val[1] != pos_: + redis_instance.setex(key_, tool.get_expire(), json.dumps((client_id_, pos_))) + + # 绉婚櫎娌℃湁鐩戝惉鐨勪唬鐮� + for code_ in codes_set: + redis_instance.delete(code_) # 鍒濆鍖栦綅缃� @@ -196,7 +268,7 @@ def get_can_listen_pos(client_id=0): client_ids = [] if client_id <= 0: - client_ids = data_process.getValidL2Clients() + client_ids = client_manager.getValidL2Clients() else: client_ids.append(client_id) random.shuffle(client_ids) @@ -229,23 +301,33 @@ # 鑾峰彇姝e湪鐩戝惉鐨勪唬鐮佺殑浣嶇疆 def get_listen_code_pos(code): redis_instance = __redisManager.getRedis() - keys = redis_instance.keys("listen_code-*-*") - for key in keys: - result = redis_instance.get(key) - if result is not None and code == result: - return key.split("-")[1], key.split("-")[2] - return None, None + val = redis_instance.get("code_listen_pos-{}".format(code)) + if val is None: + return None, None + val = json.loads(val) + return val[0], val[1] # 鏄惁姝e湪鐩戝惉 def is_listen(code): + redis_instance = __redisManager.getRedis() + val = redis_instance.get("code_listen_pos-{}".format(code)) + if val is None: + return False + else: + return True + # codes = get_listen_codes() + # return codes.__contains__(code) + + +def is_listen_old(code): codes = get_listen_codes() return codes.__contains__(code) # 鐩戝惉鏄惁婊′簡 def is_listen_full(): - clients = data_process.getValidL2Clients() + clients = client_manager.getValidL2Clients() codes = get_listen_codes() return len(codes) >= 8 * len(clients) @@ -262,17 +344,29 @@ redis_instance.setex("gp_operate-{}".format(code), 30, "1") +# 鎵归噺璁剧疆姝e湪鎿嶄綔鐨勪唬鐮� +def set_operates(codes): + redis_instance = __redisManager.getRedis() + for code in codes: + redis_instance.setex("gp_operate-{}".format(code), 30, "1") + + # 绉婚櫎姝e湪鎿嶄綔鐨勪唬鐮� def rm_operate(code): redis_instance = __redisManager.getRedis() redis_instance.delete("gp_operate-{}".format(code)) +# 鎵归噺绉婚櫎姝e湪鎿嶄綔鐨勪唬鐮� +def rm_operates(codes): + redis_instance = __redisManager.getRedis() + for code in codes: + redis_instance.delete("gp_operate-{}".format(code)) + + if __name__ == '__main__': - # print(get_can_listen_pos(0)) - # print(get_listen_codes()) - # print(is_listen_full()) - # print(is_listen("002271")) - # print(get_listen_code_pos("002272")) - code = get_listen_code_by_pos(2, 7) - print(code) + _start = time.time() + redis_instance = __redisManager.getRedis() + val = redis_instance.get("code_listen_pos-{}".format("603786")) + print(json.loads(val)) + print((time.time() - _start) * 1000) -- Gitblit v1.8.0