From 01990eda7147f99814f9b7babfaad76e835ab0b3 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 10 一月 2025 13:50:40 +0800 Subject: [PATCH] 近5日成交额过小改变参考量 --- l2/l2_data_manager_new.py | 233 ++-------------------------------------------------------- 1 files changed, 8 insertions(+), 225 deletions(-) diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py index d4c69fa..145346a 100644 --- a/l2/l2_data_manager_new.py +++ b/l2/l2_data_manager_new.py @@ -489,7 +489,8 @@ if not constant.IS_NEW_VERSION_PLACE_ORDER: try: cls.__re_compute_threading_pool.submit( - cls.__recompute_real_order_index, code, place_order_index, order_info, compute_type) + cls.__recompute_real_order_index, code, place_order_index, order_info, + compute_type) except: pass async_log_util.info(logger_l2_process, f"code:{code} 鑾峰彇鍒颁笅鍗曠湡瀹炰綅缃細{place_order_index}") @@ -716,10 +717,10 @@ b_need_cancel, b_cancel_data, extra_msg = RDCancelBigNumComputer().need_cancel(code, start_index, end_index) if b_need_cancel and b_cancel_data: - big_order_info = radical_buy_data_manager.get_total_deal_big_order_info(code, - gpcode_manager.get_limit_up_price_as_num( - code)) - if big_order_info[0]>0: + big_order_info = radical_buy_data_manager.get_total_deal_big_order_info(code, + gpcode_manager.get_limit_up_price_as_num( + code)) + if big_order_info[0] > 0: return b_cancel_data, f"RD鎾�({extra_msg})", trade_constant.CANCEL_TYPE_RD except Exception as e: async_log_util.error(logger_l2_error, @@ -1040,225 +1041,6 @@ is_limit_up_buy = False return is_limit_up_buy - @classmethod - def __is_big_order_deal_enough(cls, code): - """ - 澶у崟鎴愪氦鏄惁瓒冲 - @param code: - @param volume_rate: - @return: - """ - limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) - refer_volume = code_volumn_manager.CodeVolumeManager().get_max_volume_in_5days(code) - if refer_volume is None: - refer_volume = 0 - - money_y = int(refer_volume * limit_up_price / 1e8) - money_y = min(money_y, 50) - money_y = max(money_y, 5) - # 璁$畻澶у崟鍙傝�冩暟閲� - threshold_count = int(round(0.4 * money_y)) * 4 - threshold_money = threshold_count * 299 * 10000 - volume_rate_info = cls.volume_rate_info.get(code) - - deal_big_order_money = BigOrderDealManager().get_total_buy_money(code) - if deal_big_order_money >= threshold_money: - return True, f"閲忔瘮-{volume_rate_info}, 鎬诲ぇ鍗曟垚浜ら噾棰�({deal_big_order_money})>={threshold_money}" - else: - return False, f"閲忔瘮-{volume_rate_info}, 鎬诲ぇ鍗曟垚浜ら噾棰�({deal_big_order_money})<{threshold_money}" - - @classmethod - def __can_buy_first(cls, code): - """ - 鏄惁鍙互涓嬪崟 - @param code: - @return:(鏄惁鍙互涓嬪崟, 鏄惁娓呯悊淇″彿鏁版嵁, 涓嶈兘涓嬪崟娑堟伅, 鏄惁绠楁湁鏁堟墽琛�) - """ - - pre_result = cls.__is_pre_can_buy(code) - if not pre_result[0]: - return pre_result[0], pre_result[1], pre_result[2], pre_result[3] - - now_time_int = int(tool.get_now_time_str().replace(":", "")) - if 130100 >= now_time_int >= 112900 or now_time_int < 93100: - if now_time_int < 93100: - # 鍒ゆ柇杩�120澶╂槸鍚︽湁娑ㄥ仠 - k_format = code_nature_analyse.CodeNatureRecordManager().get_k_format_cache(code) - if k_format and len(k_format) >= 12 and not k_format[11]: - return False, True, f"09:31:00涔嬪墠涓嬪崟锛�90涓氦鏄撴棩鏃犳定鍋�", True - - # 鍒ゆ柇鎴愪氦鐨勫ぇ鍗曟暟閲� - data_list = BigOrderDealManager().get_total_buy_money_list(code) - bigger_money = 2990000 - fdatas = [] - for d in data_list: - if d < bigger_money: - continue - fdatas.append(d) - thresh_count = 3 if tool.is_sh_code(code) else 1 - if len(fdatas) < thresh_count: - return False, True, f"09:31:00涔嬪墠涓嬪崟锛屾垚浜ゅぇ鍗曟暟閲忥紙{len(fdatas)}锛変笉瓒硔thresh_count}涓�", True - else: - # 鍒ゆ柇鏁版嵁鏄惁鍗� - total_datas = local_today_datas.get(code) - if tool.trade_time_sub_with_ms(tool.get_now_time_with_ms_str(), - L2DataUtil.get_time_with_ms(total_datas[-1]["val"])) > 500: - return False, True, f"09:31:00涔嬪墠涓嬪崟锛孡2鏁版嵁鏃堕棿鐩稿樊500ms浠ヤ笂", True - else: - return False, True, f"09:31:00涔嬪墠锛�11:29:00-13:01:00涓嶈兘浜ゆ槗", True - - limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) - - if constant.MIN_CODE_PRICE < limit_up_price < constant.MAX_CODE_PRICE: - # 婊¤冻鏉′欢鐨勫崟浠� - pass - elif limit_up_price > constant.MAX_CODE_PRICE: - # HighIncreaseCodeManager().add_code(code) - # 灏忓競鍊奸珮鑲′环鍙拱 - zyltgb = global_util.zyltgb_map.get(code) - if zyltgb > 25e8 or limit_up_price > constant.MAX_SUBSCRIPT_CODE_PRICE: - return False, True, f"鑲′环澶т簬{constant.MAX_CODE_PRICE}鍧�/灏忎簬{constant.MIN_CODE_PRICE}鍧�", True - else: - return False, True, f"鑲′环灏忎簬{constant.MIN_CODE_PRICE}鍧�", True - - # place_order_count = cls.__PlaceOrderCountManager.get_place_order_count(code) - # if place_order_count and place_order_count >= 10: - # l2_trade_util.forbidden_trade(code, msg="褰撴棩涓嬪崟娆℃暟宸茶揪10娆�") - # return False, True, f"褰撴棩涓嬪崟娆℃暟宸茶揪10娆�" - - # ---------鍧囦环绾︽潫------------- - average_rate = cls.__Buy1PriceManager.get_average_rate(code) - if average_rate and average_rate <= 0.01 and tool.trade_time_sub(tool.get_now_time_str(), "10:30:00") >= 0: - return False, True, f"鍧囦环娑ㄥ箙({average_rate})灏忎簬1%", True - - total_data = local_today_datas.get(code) - - # 9:32涔嬪墠涓婅瘉寮�1鐨勭エ涓嶄拱 - if tool.is_sh_code(code) and int(total_data[-1]["val"]["time"].replace(":", "")) <= int("093100"): - # 鑾峰彇娑ㄥ仠鏃堕棿 - limit_up_data = kpl_data_manager.KPLLimitUpDataRecordManager.record_code_dict.get(code) - if limit_up_data: - limit_up_time = tool.to_time_str(limit_up_data[2]) - if int(limit_up_time.replace(":", "")) < int("093000"): - return False, True, f"涓婅瘉寮�涓�09:32涔嬪墠涓嶄笅鍗�", True - - # ------------鎸傚崟鏃堕棿绾︽潫---------- - order_begin_pos = cls.__get_order_begin_pos( - code) - if not trade_result_manager.can_place_order_for_cancel_time(code, total_data[ - order_begin_pos.buy_exec_index]) and not gpcode_manager.GreenListCodeManager().is_in_cache(code): - return False, True, f"璺濈涓婃鎸傚崟灏忎簬鏃堕棿闄愬埗", True - - # ------------鏉垮潡绾︽潫------------- - if not cls.__WantBuyCodesManager.is_in_cache(code): - # 鎯充拱鍗曟棤鏉垮潡绾︽潫 - block_buy_result = buy_strategy_util.is_block_can_buy(code, cls.__get_can_buy_block(code)) - if not block_buy_result[0]: - return block_buy_result[0], block_buy_result[1], block_buy_result[2], True - - if constant.L2_SOURCE_TYPE == constant.L2_SOURCE_TYPE_HUAXIN: - # ---------------------鍒ゆ柇鏄惁涓烘澘涓婃斁閲�---------------------- - trade_price = current_price_process_manager.get_trade_price(code) - if trade_price is None: - return False, True, f"灏氭湭鑾峰彇鍒板綋鍓嶆垚浜や环", True - # 鍒ゆ柇鏄惁涓烘澘涓婃斁閲忥細 - # 1.褰撳墠鎴愪氦浠蜂负娑ㄥ仠浠� - # 2.璺濈鏈�杩戠殑闈炴澘涓婃垚浜ょ殑鏃堕棿澶т簬涓�涓槇鍊� - if abs(limit_up_price - float(trade_price)) < 0.001: - is_limit_up_buy = cls.__is_at_limit_up_buy(code, order_begin_pos.buy_exec_index) - if is_limit_up_buy: - # 鏉夸笂涔颁笖闈炲姞缁� - # 鑾峰彇鏈�杩戠殑闈炴定鍋滀环鎴愪氦鏃堕棿 - not_limit_up_trade_time_with_ms = current_price_process_manager.get_trade_not_limit_up_time_with_ms( - code) - # 鍒ゆ柇鎴愪氦杩涘害鍒板綋鍓嶆暟鎹殑绗旀暟锛屽鏋滃皯浜�10绗斾笖杩樻湁鏈垚浜ょ殑澶у崟锛�>=299锛夊氨鍙互涓嬪崟 - trade_index, is_default = cls.__TradeBuyQueue.get_traded_index(code) - if trade_index is None: - trade_index = 0 - can_place_order, msg = buy_strategy_util.is_near_by_trade_index(code, trade_index) - if not can_place_order: - try: - # 涓嶈兘涓嬪崟锛屽垽鏂皬缇ゆ挙鏄惁鍙互涓� - if buy_strategy_util.is_has_small_batch_cancel(code, trade_index, - order_begin_pos.buy_single_index): - # 鍒ゆ柇鎾ゅ崟姣斾緥鏄惁瓒冲 - cancel_rate_reieved_info = buy_strategy_util.is_cancel_rate_reieved(code, 0.69, - trade_index, - order_begin_pos.buy_single_index) - if not cancel_rate_reieved_info[0]: - return False, True, f"鏉夸笂鏀鹃噺璺濈杩�({not_limit_up_trade_time_with_ms})锛屾湁灏忕兢鎾�, 鏁翠綋鎾ゅ崟姣斾緥涓嶈冻锛坽trade_index}-{order_begin_pos.buy_single_index}锛墈cancel_rate_reieved_info[1]}", False - else: - return False, True, f"鏉夸笂鏀鹃噺璺濈杩�({not_limit_up_trade_time_with_ms})锛屾病鏈夊皬缇ゆ挙锛坽trade_index}-{order_begin_pos.buy_single_index}锛�", False - except Exception as e: - l2_log.info(code, logger_l2_error, f"鏉夸笂鏀鹃噺({not_limit_up_trade_time_with_ms})涓嶈冻寮傚父锛歿str(e)}") - logger_l2_error.exception(e) - return False, True, f"鏉夸笂鏀鹃噺璁$畻寮傚父", False - - # -------鏄惁璺濈鎴愪氦杩涘害浣嶅お杩�-------- - buy1_money = code_price_manager.Buy1PriceManager().get_latest_buy1_money(code) - buy1_price = code_price_manager.Buy1PriceManager().get_buy1_price(code) - if buy1_price and abs(limit_up_price - buy1_price) > 0.0001: - # 涔�1鏈定鍋� - buy1_money = 0 - if not buy1_money: - buy1_money = 1 - if buy_strategy_util.is_far_away_from_trade_index(code, trade_index, buy1_money): - return False, True, f"璺濈鎴愪氦杩涘害浣嶅お杩滐細鎴愪氦杩涘害-{trade_index} 涔�1-{buy1_money}", False - - # ------------------涓婅瘉涓嬪崟闇�瑕佹湁鎴愪氦澶у崟锛堝寘鍚富鍔ㄤ拱涓庤鍔ㄤ拱锛夋垨鑰呮寕涔扮殑澶у崟----------------- - if tool.is_sh_code(code): - deal_big_order_count = BigOrderDealManager().get_total_buy_count(code) - if deal_big_order_count < 1: - # 缁熻鎸備拱澶у崟 - trade_index, is_default = cls.__TradeBuyQueue.get_traded_index(code) - if trade_index is None: - trade_index = 0 - limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) - # 浠庢垚浜よ繘搴︿綅鍒版埅鑷充綅缃绠楀ぇ鍗� - min_money = l2_data_util.get_big_money_val(limit_up_price, tool.is_ge_code(code)) - left_count, left_money = cancel_buy_strategy.L2DataComputeUtil.compute_left_buy_order(code, - trade_index, - total_data[ - -1][ - "index"], - limit_up_price, - min_money=min_money) - if left_count < 1: - return False, False, f"娌℃湁宸叉寕鎴栬�呮垚浜ょ殑澶у崟", False - if not cls.__WantBuyCodesManager.is_in_cache(code): - # 鎯充拱鍗曚笉闇�瑕佸ぇ鍗曠害鏉� - big_deal_order_info = cls.__is_big_order_deal_enough(code) - if not big_deal_order_info[0]: - return False, False, big_deal_order_info[1], False - - place_order_count = trade_data_manager.PlaceOrderCountManager().get_place_order_count(code) - # ------------------绗竴鍜岀浜屾涓嬪崟閮藉繀椤昏鏈夎嚦灏戜竴绗旀湭鎴愪氦鐨勫ぇ鍗�-------------------------- - # 璁$畻澶у崟 - total_datas = local_today_datas.get(code) - if place_order_count < 2: - trade_index, is_default = transaction_progress.TradeBuyQueue().get_traded_index(code) - if trade_index is None: - trade_index = 0 - min_money = l2_data_util.get_big_money_val(limit_up_price, tool.is_ge_code(code)) - left_count, left_num = L2DataComputeUtil.compute_left_buy_order(code, trade_index, - total_datas[-1]["index"], - limit_up_price, min_money) - if left_count < 1: - return False, False, f"绗瑊place_order_count + 1}娆′笅鍗曟棤寰呮垚浜ょ殑澶у崟", False - - # -------鍒ゆ柇鏄惁鏄噺鍖栦笅鍗曪紝濡傛灉鏄氨涓嶈窡鍒颁笅鍗�-------- - # 閲嶈锛氶噺鍖栦笅鍗曚細澧炲姞涓嬪崟娆℃暟锛屾澘鍧椾笅鍗曚腑鏈変笅鍗曟鏁扮殑浣跨敤锛屾墍浠ユ澘鍧楅渶瑕佸湪閲忓寲鍒ゆ柇涔嬪墠 - # 鍙湁鏉垮潡婊¤冻涓嬪崟涔嬪悗鎵嶈兘鍒ゆ柇鍏跺畠鏉′欢 - range_indexes = cls.__processing_data_indexes.get(code) - if range_indexes: - # 鏄惁鏄噺鍖栧崟 - is_quantization_result = buy_strategy_util.is_quantization(code, range_indexes[0], range_indexes[1]) - if is_quantization_result[0] and not gpcode_manager.GreenListCodeManager().is_in_cache(code): - # 閲忓寲鍗曚笖娌℃湁鍔犵豢 - cls.__next_buy_time_dict[code] = is_quantization_result[1] - return False, True, is_quantization_result[2], True - return True, False, "婊¤冻涓嬪崟鏉′欢", True - # 鑾峰彇鍙互涔扮殑鏉垮潡 @classmethod def __get_can_buy_block(cls, code): @@ -1277,7 +1059,8 @@ kpl_data_manager.KPLLimitUpDataRecordManager.total_datas, latest_current_limit_up_records, block_info.get_before_blocks_dict(), - kpl_data_manager.KPLLimitUpDataRecordManager.get_current_limit_up_reason_codes_dict(), codes_delegate, codes_success) + kpl_data_manager.KPLLimitUpDataRecordManager.get_current_limit_up_reason_codes_dict(), + codes_delegate, codes_success) can_buy_result = CodePlateKeyBuyManager.can_buy(code) return can_buy_result -- Gitblit v1.8.0