From 8165b72761b0729e5cc3ca00c9f2f52215055229 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期六, 09 九月 2023 11:51:33 +0800 Subject: [PATCH] 涨停后板块不是老大撤单 --- third_data/code_plate_key_manager.py | 141 +++++++++++++++++++++++++++------------------- 1 files changed, 82 insertions(+), 59 deletions(-) diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py index 5d4a496..b47fb4d 100644 --- a/third_data/code_plate_key_manager.py +++ b/third_data/code_plate_key_manager.py @@ -428,6 +428,47 @@ l2_trade_util.forbidden_trade(code) logger_kpl_block_can_buy.info(msg) + @classmethod + def __is_block_can_buy(cls, code, block, current_limit_up_datas, code_limit_up_reason_dict, + yesterday_current_limit_up_codes, limit_up_record_datas): + log.logger_kpl_debug.info(f"鍒ゆ柇鏉垮潡鏄惁鍙拱锛歿block}") + # is_top_8_record, top_8_record = kpl_block_util.is_record_top_block(code, block, limit_up_record_datas, + # yesterday_current_limit_up_codes, 50) + # is_top_4_current, top_4_current = kpl_block_util.is_current_top_block(code, block, current_limit_up_datas, + # yesterday_current_limit_up_codes, 50) + # is_top_4 = is_top_8_record and is_top_4_current + # msg_list.append(f"\n瀹炴椂top10(娑ㄥ仠鏁伴噺锛歿len(current_limit_up_datas)})") + # msg_list.append(f"鍘嗗彶top20(娑ㄥ仠鏁伴噺锛歿len(top_8_record)})") + + # 鑾峰彇涓绘澘瀹炴椂韬綅,鍓旈櫎楂樹綅鏉� + current_shsz_rank = kpl_block_util.get_code_current_rank(code, block, current_limit_up_datas, + code_limit_up_reason_dict, + yesterday_current_limit_up_codes, shsz=True) + record_shsz_rank = kpl_block_util.get_code_record_rank(code, block, limit_up_record_datas, + code_limit_up_reason_dict, + yesterday_current_limit_up_codes, shsz=True) + # 鑾峰彇涓绘澘鍘嗗彶韬綅 + + pen_limit_up_codes = kpl_block_util.get_shsz_open_limit_up_codes(code, block, limit_up_record_datas, + code_limit_up_reason_dict) + if pen_limit_up_codes: + # 涓绘澘寮�1 + if current_shsz_rank < len(pen_limit_up_codes) + 1 and record_shsz_rank < len(pen_limit_up_codes) + 1: + # 灞炰簬榫�1,榫�2 + return True, f"{tool.get_now_time_str()} {block}锛歵op10娑ㄥ仠鏉垮潡锛屼富鏉垮紑1({pen_limit_up_codes}),灞炰簬涓绘澘鍓嶉緳{len(pen_limit_up_codes) + 1}(瀹炴椂韬綅-{current_shsz_rank}/{len(current_limit_up_datas)})" + else: + if record_shsz_rank >= len(pen_limit_up_codes) + 1: + cls.__remove_from_l2(code, f"{code}鏍规嵁韬綅绂佹涔板叆锛氥�恵block}銆戝巻鍙茶韩浣峽record_shsz_rank}") + return False, f"鏉垮潡-{block}: top4娑ㄥ仠鏉垮潡锛屼富鏉垮紑1锛坽pen_limit_up_codes}锛�,涓嶄负涓绘澘鍓嶉緳{len(pen_limit_up_codes) + 1}锛堝疄鏃惰韩浣�-{current_shsz_rank},鍘嗗彶韬綅-{record_shsz_rank}锛�" + else: + if current_shsz_rank == 0 and record_shsz_rank < 2: + return True, f"{tool.get_now_time_str()} {block}锛歵op4娑ㄥ仠鏉垮潡锛岄潪涓绘澘寮�1锛屽睘浜庨緳1锛屽疄鏃舵定鍋滃垪琛ㄦ暟閲�({len(current_limit_up_datas)})" + else: + if record_shsz_rank >= 2: + cls.__remove_from_l2(code, f"{code}鏍规嵁韬綅绂佹涔板叆锛氥�恵block}銆戝巻鍙茶韩浣峽record_shsz_rank}") + + return False, f"鏉垮潡-{block}: top4娑ㄥ仠鏉垮潡锛岄潪涓绘澘寮�1,涓嶄负涓绘澘榫�1锛堝疄鏃惰韩浣�-{current_shsz_rank},鍘嗗彶韬綅-{record_shsz_rank}锛�" + # 鑾峰彇鍙互涔扮殑鏉垮潡 # current_limit_up_datas: 浠婃棩瀹炴椂娑ㄥ仠 # latest_2_day_limit_up_datas锛氭渶杩�2澶╃殑瀹炴椂娑ㄥ仠锛堜笉鍚粖鏃ワ級 @@ -445,6 +486,7 @@ else: code_limit_up_reason_dict[d[3]] = d[2] return code_limit_up_reason_dict + if current_limit_up_datas is None: current_limit_up_datas = [] @@ -474,67 +516,13 @@ can_buy_blocks = [] for block in keys: - log.logger_kpl_debug.info(f"鍒ゆ柇鏉垮潡鏄惁鍙拱锛歿block}") - # is_top_8_record, top_8_record = kpl_block_util.is_record_top_block(code, block, limit_up_record_datas, - # yesterday_current_limit_up_codes, 50) - # is_top_4_current, top_4_current = kpl_block_util.is_current_top_block(code, block, current_limit_up_datas, - # yesterday_current_limit_up_codes, 50) - # is_top_4 = is_top_8_record and is_top_4_current - # msg_list.append(f"\n瀹炴椂top10(娑ㄥ仠鏁伴噺锛歿len(current_limit_up_datas)})") - # msg_list.append(f"鍘嗗彶top20(娑ㄥ仠鏁伴噺锛歿len(top_8_record)})") - # 鑾峰彇涓绘澘瀹炴椂韬綅,鍓旈櫎楂樹綅鏉� - current_shsz_rank = kpl_block_util.get_code_current_rank(code, block, current_limit_up_datas, - code_limit_up_reason_dict, - yesterday_current_limit_up_codes, shsz=True) - record_shsz_rank = kpl_block_util.get_code_record_rank(code, block, limit_up_record_datas, - code_limit_up_reason_dict, - yesterday_current_limit_up_codes, shsz=True) - # 鑾峰彇涓绘澘鍘嗗彶韬綅 - if True: - pen_limit_up_codes = kpl_block_util.get_shsz_open_limit_up_codes(code, block, limit_up_record_datas, - code_limit_up_reason_dict) - if pen_limit_up_codes: - # 涓绘澘寮�1 - if current_shsz_rank < len(pen_limit_up_codes) + 1 and record_shsz_rank < len(pen_limit_up_codes) + 1: - # 灞炰簬榫�1,榫�2 - can_buy_blocks.append((block, - f"{tool.get_now_time_str()} {block}锛歵op10娑ㄥ仠鏉垮潡锛屼富鏉垮紑1({pen_limit_up_codes}),灞炰簬涓绘澘鍓嶉緳{len(pen_limit_up_codes) + 1}(瀹炴椂韬綅-{current_shsz_rank}/{len(current_limit_up_datas)})")) - continue - else: - if record_shsz_rank >= len(pen_limit_up_codes) + 1: - cls.__remove_from_l2(code, f"{code}鏍规嵁韬綅绂佹涔板叆锛氥�恵block}銆戝巻鍙茶韩浣峽record_shsz_rank}") - msg_list.append( - f"鏉垮潡-{block}: top4娑ㄥ仠鏉垮潡锛屼富鏉垮紑1锛坽pen_limit_up_codes}锛�,涓嶄负涓绘澘鍓嶉緳{len(pen_limit_up_codes) + 1}锛堝疄鏃惰韩浣�-{current_shsz_rank},鍘嗗彶韬綅-{record_shsz_rank}锛�") - continue - else: - if current_shsz_rank == 0 and record_shsz_rank < 2: - can_buy_blocks.append((block, f"{tool.get_now_time_str()} {block}锛歵op4娑ㄥ仠鏉垮潡锛岄潪涓绘澘寮�1锛屽睘浜庨緳1锛屽疄鏃舵定鍋滃垪琛ㄦ暟閲�({len(current_limit_up_datas)})")) - continue - else: - if record_shsz_rank >= 2: - cls.__remove_from_l2(code, f"{code}鏍规嵁韬綅绂佹涔板叆锛氥�恵block}銆戝巻鍙茶韩浣峽record_shsz_rank}") - - msg_list.append( - f"鏉垮潡-{block}: top4娑ㄥ仠鏉垮潡锛岄潪涓绘澘寮�1,涓嶄负涓绘澘榫�1锛堝疄鏃惰韩浣�-{current_shsz_rank},鍘嗗彶韬綅-{record_shsz_rank}锛�") - continue + can_buy, msg = cls.__is_block_can_buy(code, block, current_limit_up_datas, code_limit_up_reason_dict, + yesterday_current_limit_up_codes, limit_up_record_datas) + if can_buy: + can_buy_blocks.append((block, msg)) else: - pass - # # 鏄惁婊¤冻琛屼笟绮鹃�夋祦鍏ヨ姹� - # is_in_top_input = RealTimeKplMarketData.is_in_top(set([block]))[0] - # if not is_in_top_input: - # msg_list.append( - # f"鏉垮潡-{block}: 闈瀟op4娑ㄥ仠鏉垮潡锛屼笉婊¤冻绮鹃��/琛屼笟娴佸叆瑕佹眰") - # continue - # else: - # # 鏄惁涓轰富鏉块緳1锛堝疄鏃堕緳1锛屽巻鍙查緳2浠ュ唴锛� - # if current_shsz_rank == 0 and record_shsz_rank < 2: - # can_buy_blocks.append((block, f"{block}锛氫笉鏄痶op4娑ㄥ仠鏉垮潡锛屾弧瓒崇簿閫�/琛屼笟娴佸叆瑕佹眰锛屾弧瓒充富鏉块緳1")) - # continue - # else: - # msg_list.append( - # f"鏉垮潡-{block}: 涓嶆槸top4娑ㄥ仠鏉垮潡锛屾弧瓒崇簿閫�/琛屼笟娴佸叆瑕佹眰,涓嶄负涓绘澘榫�1锛堝疄鏃惰韩浣�-{current_shsz_rank},鍘嗗彶韬綅-{record_shsz_rank}锛�") - # continue + msg_list.append(msg) if len(can_buy_blocks) == len(keys): blocks = [x[0] for x in can_buy_blocks] blocks_msg = "\n".join([x[1] for x in can_buy_blocks]) @@ -604,6 +592,7 @@ return False, ",".join(msg_list) + # 鏇存柊浠g爜鏉垮潡鍒ゆ柇鏄惁鍙互涔扮殑缁撴灉 @classmethod def update_can_buy_blocks(cls, code, current_limit_up_datas, limit_up_record_datas, yesterday_current_limit_up_codes, @@ -614,6 +603,40 @@ # 淇濆瓨鏉垮潡璁$畻缁撴灉 cls.__can_buy_compute_result_dict[code] = (can_buy, msg) + # 鍒ゆ柇鏄惁涓虹湡鑰佸ぇ + @classmethod + def __is_real_first_limit_up(cls, code, block, current_limit_up_datas, limit_up_record_datas, + yesterday_current_limit_up_codes, + before_blocks_dict): + # 鍔犺浇娑ㄥ仠浠g爜鐨勭洰鏍囨澘鍧� + def load_code_block(): + for d in limit_up_record_datas: + if d[2] in constant.KPL_INVALID_BLOCKS and d[3] in before_blocks_dict: + code_limit_up_reason_dict[d[3]] = list(before_blocks_dict.get(d[3]))[0] + else: + code_limit_up_reason_dict[d[3]] = d[2] + return code_limit_up_reason_dict + + if current_limit_up_datas is None: + current_limit_up_datas = [] + code_limit_up_reason_dict = {} + load_code_block() + can_buy, msg = cls.__is_block_can_buy(code, block, current_limit_up_datas, code_limit_up_reason_dict, + yesterday_current_limit_up_codes, limit_up_record_datas) + return can_buy, msg + + @classmethod + def is_need_cancel(cls, code, limit_up_reason, current_limit_up_datas, limit_up_record_datas, + yesterday_current_limit_up_codes, + before_blocks_dict): + can_buy, msg = cls.__is_real_first_limit_up(code, limit_up_reason, current_limit_up_datas, + limit_up_record_datas, + yesterday_current_limit_up_codes, + before_blocks_dict) + if not can_buy: + logger_kpl_block_can_buy.warning(f"{code} 鏍规嵁娑ㄥ仠鍘熷洜锛坽limit_up_reason}锛夊尮閰嶄笉鑳戒拱") + return not can_buy + if __name__ == "__main__": pass -- Gitblit v1.8.0