code_attribute/first_target_code_data_processor.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
code_attribute/gpcode_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
db/redis_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
inited_data.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
l2/huaxin/huaxin_delegate_postion_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
l2/l2_data_manager_new.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
output/code_info_output.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
output/limit_up_data_filter.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
third_data/code_plate_key_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
trade/current_price_process_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
code_attribute/first_target_code_data_processor.py
@@ -140,8 +140,8 @@ block_info.init_code(code) if new_add_codes: gpcode_manager.set_first_gp_codes_with_data(HistoryKDatasUtils.get_gp_latest_info(codes, fields="symbol,sec_name,sec_type,sec_level")) gpcode_manager.FirstGPCodesManager().set_first_gp_codes_with_data(HistoryKDatasUtils.get_gp_latest_info(codes, fields="symbol,sec_name,sec_type,sec_level")) # 加入首板历史记录 logger_first_code_record.info("新增首板:{}", new_add_codes) code_attribute/gpcode_manager.py
@@ -342,64 +342,104 @@ RedisUtils.realse(redis_instance) __gp_list_first_codes_cache = set() # -------------------------------首板代码管理------------------------------- # 添加首板代码 # code_datas 掘金返回的数据 def set_first_gp_codes_with_data(code_datas): redis_instance = __redisManager.getRedis() try: codes, name_codes = __parse_codes_data(code_datas) codes_set = set() for code in codes: codes_set.add(code) old_codes_set = __gp_list_first_codes_cache if old_codes_set is None: old_codes_set = set() del_set = old_codes_set - codes_set add_codes = codes_set - old_codes_set for code in add_codes: RedisUtils.sadd(redis_instance, "gp_list_first", code, auto_free=False) for code in del_set: RedisUtils.srem(redis_instance, "gp_list_first", code, auto_free=False) if add_codes or del_set: RedisUtils.expire(redis_instance, "gp_list_first", tool.get_expire(), auto_free=False) # 更新缓存 __gp_list_first_codes_cache.clear() for code in codes_set: __gp_list_first_codes_cache.add(code) class FirstGPCodesManager: __db = 0 __redisManager = redis_manager.RedisManager(0) __gp_list_first_codes_cache = set() __instance = None old_name_codes = CodesNameManager.list_first_code_name_dict() if old_name_codes is None: old_name_codes = name_codes else: for key in name_codes: old_name_codes[key] = name_codes[key] CodesNameManager.set_first_code_names(old_name_codes) finally: RedisUtils.realse(redis_instance) def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = super(FirstGPCodesManager, cls).__new__(cls, *args, **kwargs) cls.__load_datas() return cls.__instance @classmethod def __get_redis(cls): return cls.__redisManager.getRedis() # 移除首板代码 def remove_first_gp_code(codes): redis_instance = __redisManager.getRedis() try: for code in codes: RedisUtils.srem(redis_instance, "gp_list_first", code, auto_free=False) finally: RedisUtils.realse(redis_instance) @classmethod def __load_datas(cls): __redis = cls.__get_redis() try: cls.__gp_list_first_codes_cache = RedisUtils.smembers(__redis, "gp_list_first") finally: RedisUtils.realse(__redis) @classmethod def __parse_codes_data(cls, code_datas): codes = [] name_codes = {} for _data in code_datas: # 正常的股票 if _data["sec_type"] == 1 and _data["sec_level"] == 1: code = _data["symbol"].split(".")[1] if code.find("30") != 0 and code.find("68") != 0: name = _data["sec_name"] codes.append(code) # 保存代码对应的名称 name_codes[name] = code return codes, name_codes # 获取首板代码 def get_first_gp_codes(): return RedisUtils.smembers(__redisManager.getRedis(), "gp_list_first") # 添加首板代码 # code_datas 掘金返回的数据 def set_first_gp_codes_with_data(self, code_datas): redis_instance = self.__get_redis() try: codes, name_codes = self.__parse_codes_data(code_datas) codes_set = set() for code in codes: codes_set.add(code) old_codes_set = self.__gp_list_first_codes_cache if old_codes_set is None: old_codes_set = set() del_set = old_codes_set - codes_set add_codes = codes_set - old_codes_set for code in add_codes: RedisUtils.sadd(redis_instance, "gp_list_first", code, auto_free=False) for code in del_set: RedisUtils.srem(redis_instance, "gp_list_first", code, auto_free=False) if add_codes or del_set: RedisUtils.expire(redis_instance, "gp_list_first", tool.get_expire(), auto_free=False) # 更新缓存 self.__gp_list_first_codes_cache.clear() self.__gp_list_first_codes_cache |= codes_set old_name_codes = CodesNameManager.list_first_code_name_dict() if old_name_codes is None: old_name_codes = name_codes else: for key in name_codes: old_name_codes[key] = name_codes[key] CodesNameManager.set_first_code_names(old_name_codes) finally: RedisUtils.realse(redis_instance) # 是否在首板里面 def is_in_first_gp_codes(code): return RedisUtils.sismember(__redisManager.getRedis(), "gp_list_first", code) # 移除首板代码 def remove_first_gp_code(self, codes): redis_instance = self.__get_redis() try: for code in codes: self.__gp_list_first_codes_cache.discard(code) RedisUtils.srem(redis_instance, "gp_list_first", code, auto_free=False) finally: RedisUtils.realse(redis_instance) # 获取首板代码 def get_first_gp_codes(self): return RedisUtils.smembers(self.__get_redis(), "gp_list_first") def get_first_gp_codes_cache(self): return self.__gp_list_first_codes_cache # 是否在首板里面 def is_in_first_gp_codes(self, code): return RedisUtils.sismember(self.__get_redis(), "gp_list_first", code) # 是否在首板里面 def is_in_first_gp_codes_cache(self, code): return code in self.__gp_list_first_codes_cache # 获取名称对应的代码 @@ -464,16 +504,16 @@ def rm_gp(code): RedisUtils.srem(__redisManager.getRedis(), "gp_list", code) remove_first_gp_code([code]) FirstGPCodesManager().remove_first_gp_code([code]) def is_in_gp_pool(code): return RedisUtils.sismember(__redisManager.getRedis(), "gp_list", code) or is_in_first_gp_codes(code) return RedisUtils.sismember(__redisManager.getRedis(), "gp_list", code) or FirstGPCodesManager().is_in_first_gp_codes_cache(code) def get_gp_list(): codes = RedisUtils.smembers(__redisManager.getRedis(), "gp_list") first_codes = get_first_gp_codes() first_codes = FirstGPCodesManager().get_first_gp_codes() return set.union(codes, first_codes) @@ -578,7 +618,7 @@ # datas:[(code,price)] def set_prices(datas): pipe = __redisManager.getRedis().pipeline() pipe = __redisManager.getRedis().pipeline() for d in datas: code, price = d[0], d[1] if code in __current_price_cache and __current_price_cache[code] == price: db/redis_manager.py
@@ -158,16 +158,13 @@ if data: db = data[0] method_name = data[1] print(db, method_name) args = data[2] _redis = RedisManager(db).getRedisNoPool() method = getattr(_redis, method_name) if type(args) == tuple: result = method(*args) print(result) else: result = method(args) print(result) except Exception as e1: logging.exception(e1) inited_data.py
@@ -12,6 +12,7 @@ from db.redis_manager import RedisUtils from ths import client_manager import constant from trade.trade_manager import AccountAvailableMoneyManager from utils import global_util, tool import threading @@ -68,6 +69,8 @@ global_data_loader.load_zyltgb() # 载入量 global_data_loader.load_volumn() # 初始化载入 AccountAvailableMoneyManager() # 9点25之前删除所有代码 if tool.trade_time_sub(tool.get_now_time_str(), "09:25:00") <= 0 or True: l2/huaxin/huaxin_delegate_postion_manager.py
@@ -48,5 +48,7 @@ # 获取到了下单位置 hx_logger_trade_debug.info(f"真实下单位置:{code}-{d['index']}") logger_real_place_order_position.info(f"真实下单位置:{code}-{d['index']}") if code in _place_order_info_dict: _place_order_info_dict.pop(code) return d["index"] return None l2/l2_data_manager_new.py
@@ -1108,7 +1108,7 @@ max_num_set) _start_time = l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time, "纯买额统计时间") l2_log.debug(code, "m值-{} 量比:{}", threshold_money, cls.volume_rate_info[code][0]) l2_log.debug(code, "m值-{} 量比:{} rebegin_buy_pos:{}", threshold_money, cls.volume_rate_info[code][0], rebegin_buy_pos) # 买入信号位与计算位置间隔2s及以上了 if rebegin_buy_pos is not None: output/code_info_output.py
@@ -451,7 +451,7 @@ def __load_codes_scores(): # 获取所有监听中的代码 codes = gpcode_manager.get_first_gp_codes() codes = gpcode_manager.FirstGPCodesManager().get_first_gp_codes() scores = {} # l2_data_manager_new.L2TradeDataProcessor.get_code_scores() for code in codes: if code not in scores: output/limit_up_data_filter.py
@@ -62,7 +62,7 @@ # 获取代码分数字典 def get_codes_scores_dict(codes): # 获取所有监听中的代码 first_codes = gpcode_manager.get_first_gp_codes() first_codes = gpcode_manager.FirstGPCodesManager().get_first_gp_codes() scores = {} for code in codes: if code not in first_codes: server.py
@@ -372,7 +372,7 @@ msg = "" try: if not gpcode_manager.is_in_gp_pool(code) and not gpcode_manager.is_in_first_gp_codes(code): if not gpcode_manager.is_in_gp_pool(code) and not gpcode_manager.FirstGPCodesManager().is_in_first_gp_codes_cache(code): # 没在目标代码中且没有在首板今日历史代码中 raise Exception("代码没在监听中") @@ -983,7 +983,7 @@ time.sleep(1.5) if __name__ == "__main__1": codes = gpcode_manager.get_first_gp_codes() codes = gpcode_manager.FirstGPCodesManager().get_first_gp_codes() for code in codes: try: global_data_loader.load_zyltgb() third_data/code_plate_key_manager.py
@@ -48,16 +48,38 @@ # 开盘啦禁止交易板块管理 class KPLPlateForbiddenManager: __redisManager = redis_manager.RedisManager(3) __kpl_forbidden_plates_cache = set() def __get_redis(self): return self.__redisManager.getRedis() __instance = None def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = super(KPLPlateForbiddenManager, cls).__new__(cls, *args, **kwargs) cls.__load_datas() return cls.__instance @classmethod def __load_datas(cls): __redis = cls.__get_redis() try: __kpl_forbidden_plates_cache = RedisUtils.smembers(__redis, "kpl_forbidden_plates") finally: RedisUtils.realse(__redis) @classmethod def __get_redis(cls): return cls.__redisManager.getRedis() def save_plate(self, plate): self.__kpl_forbidden_plates_cache.add(plate) RedisUtils.sadd(self.__get_redis(), "kpl_forbidden_plates", plate) RedisUtils.expire(self.__get_redis(), "kpl_forbidden_plates", tool.get_expire()) def list_all(self): return RedisUtils.smembers(self.__get_redis(), "kpl_forbidden_plates") def list_all_cache(self): return self.__kpl_forbidden_plates_cache class LimitUpCodesPlateKeyManager: @@ -217,7 +239,7 @@ # 后排才能挂单 return 0, "身位不为后排" forbidden_plates = cls.__KPLPlateForbiddenManager.list_all() forbidden_plates = cls.__KPLPlateForbiddenManager.list_all_cache() if key in forbidden_plates: return 0, "不买该板块" @@ -236,7 +258,7 @@ def is_in_top(cls, keys): reasons = cls.get_can_buy_key_set() log.logger_kpl_debug.debug("市场流入前5:{}", reasons) forbidden_plates = cls.__KPLPlateForbiddenManager.list_all() forbidden_plates = cls.__KPLPlateForbiddenManager.list_all_cache() reasons = reasons - forbidden_plates temp_set = keys & reasons log.logger_kpl_debug.debug("市场流入前5匹配结果:{}", temp_set) trade/current_price_process_manager.py
@@ -23,7 +23,7 @@ def accept_prices(prices): # 获取首板代码 first_codes = gpcode_manager.get_first_gp_codes() first_codes = gpcode_manager.FirstGPCodesManager().get_first_gp_codes() print("总价格代码数量:", len(prices))