From d9b94154c523e631ac6fa38bce9836f12ac9581e Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期四, 06 三月 2025 16:45:27 +0800 Subject: [PATCH] 总抛压大的扫入策略调整 --- l2/l2_data_manager_new.py | 102 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 99 insertions(+), 3 deletions(-) diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py index 9efbcae..47918a4 100644 --- a/l2/l2_data_manager_new.py +++ b/l2/l2_data_manager_new.py @@ -28,7 +28,7 @@ from trade import trade_manager, trade_queue_manager, l2_trade_factor, l2_trade_util, \ trade_result_manager, current_price_process_manager, trade_data_manager, trade_huaxin, trade_record_log_util, \ trade_constant, buy_open_limit_up_strategy -from trade.buy_radical import radical_buy_data_manager +from trade.buy_radical import radical_buy_data_manager, radical_buy_strategy from l2 import l2_data_manager, l2_log, l2_data_source_util, code_price_manager, \ transaction_progress, cancel_buy_strategy, place_order_single_data_manager from l2.cancel_buy_strategy import DCancelBigNumComputer, \ @@ -883,7 +883,7 @@ params_desc = cls.__l2PlaceOrderParamsManagerDict[code].get_buy_rank_desc() l2_log.debug(code, params_desc) #################娓呴櫎鏈涓嬪崟鐨勫ぇ鍗曟暟鎹�############### - EveryLimitupBigDealOrderManager.clear(code,"涓嬪崟鎴愬姛") + EveryLimitupBigDealOrderManager.clear(code, "涓嬪崟鎴愬姛") ############璁板綍涓嬪崟鏃剁殑鏁版嵁############ try: jx_blocks, jx_blocks_by = KPLCodeJXBlockManager().get_jx_blocks_cache( @@ -1443,6 +1443,7 @@ # ---------璁$畻婵�杩涗拱鍏ョ殑淇″彿--------- radical_result = cls.__compute_radical_order_begin_pos(code, compute_start_index, compute_end_index) + if radical_result[0]: buy_single_index, buy_exec_index = radical_result[1], radical_result[1] buy_volume_rate = cls.volume_rate_info[code][0] @@ -1472,7 +1473,35 @@ # 鐩戝惉澶у崟 RDCancelBigNumComputer().set_watch_indexes(code, radical_result[4]) return + else: + radical_result = cls.__compute_radical_order_begin_pos_for_many_sell(code, start_index, end_index) + if radical_result[0]: + buy_single_index, buy_exec_index = radical_result[0][0], radical_result[0][1] + buy_volume_rate = cls.volume_rate_info[code][0] + refer_sell_data = cls.__L2MarketSellManager.get_refer_sell_data(code, + total_datas[buy_single_index]["val"][ + "time"]) + if refer_sell_data: + sell_info = (refer_sell_data[0], refer_sell_data[1]) + else: + sell_info = (total_datas[buy_single_index]["val"]["time"], 0) + threshold_money = 0 + order_begin_pos_info = OrderBeginPosInfo(buy_single_index=buy_single_index, + buy_exec_index=buy_exec_index, + buy_compute_index=buy_exec_index, + num=total_datas[buy_single_index]["val"]["num"], count=1, + max_num_set=set(), + buy_volume_rate=buy_volume_rate, + mode=OrderBeginPosInfo.MODE_RADICAL, + mode_desc=f"鎬绘姏鍘嬪ぇ鎵叆:{radical_result[2]}", + sell_info=sell_info, + threshold_money=threshold_money) + order_begin_pos_info.at_limit_up = cls.__is_at_limit_up_buy(code) + ordered = cls.__process_with_find_exec_index(code, order_begin_pos_info, compute_end_index, + block_info=radical_result[2]) + if ordered: + radical_buy_data_manager.BlockPlaceOrderRecordManager().add_record(code, radical_result[2]) if RadicalBuyDealCodesManager().get_code_blocks(code): # 宸茬粡鎵叆涓嬭繃鍗� return @@ -1909,7 +1938,9 @@ code_volumn_manager.CodeVolumeManager().get_volume_rate_refer_in_5days( code), refer_sell_money, - for_buy=True, is_almost_open_limit_up=radical_data[5]) + for_buy=True, + is_almost_open_limit_up= + radical_data[5]) # 缂轰箯鐨勫ぇ鍗曢噾棰� lack_money = big_order_deal_enough_result[3] # 濡傛灉鏈夊ぇ鍗曟垚浜ゅ氨涓嶉渶瑕佺湅澶у崟 @@ -2022,6 +2053,71 @@ async_log_util.info(logger_l2_not_buy_reasons, f"{code}#{result[2]}") return result + # 鎬诲崠棰濆弬鑰冩椂闂翠娇鐢ㄨ褰� + __refer_sell_used_times = {} + + @classmethod + def __compute_radical_order_begin_pos_for_many_sell(cls, code, start_index, end_index): + """ + 璁$畻娣辫瘉楂樻姏鍘嬬殑鍗栫殑涔板叆淇″彿 + @param code: + @param start_index: + @param end_index: + @return: 淇″彿淇℃伅锛堜俊鍙蜂綅,鎵ц浣嶏級, 娑堟伅, 鍙拱鍏ョ殑鏉垮潡 + """ + if not tool.is_sz_code(code): + return None, "闈炴繁璇佺殑绁�", None + # 鍒ゆ柇鎶涘帇鏄惁澶т簬5000w + total_datas = local_today_datas.get(code) + refer_sell_data = cls.__L2MarketSellManager.get_refer_sell_data(code, total_datas[-1]["val"]["time"]) + if not refer_sell_data or refer_sell_data[1] < 5e7: + return None, "鎬诲崠棰濆皬浜�5000涓�", None + if code in cls.__refer_sell_used_times and refer_sell_data[0] in cls.__refer_sell_used_times: + return None, f"鏃堕棿宸茬粡琚娇鐢細{refer_sell_data[0]}", None + + deal_codes = RadicalBuyDealCodesManager().get_deal_codes() + if code in deal_codes: + return None, f"宸茬粡鎴愪氦", None + + f_buy_blocks, orgin_buy_blocks = radical_buy_strategy.compute_can_radical_buy_blocks(code, deal_codes) + if not f_buy_blocks: + return None, f"鏉垮潡涓嶅彲涔板叆", None + + # 鍒ゆ柇鏄惁鏈夋定鍋滀拱鐨勬暟鎹� + has_limit_up = False + for i in range(start_index, end_index + 1): + data = total_datas[i] + val = data["val"] + if L2DataUtil.is_limit_up_price_buy(val): + has_limit_up = True + break + if not has_limit_up: + return None, "鏃犳定鍋滀拱鏁版嵁", None + # 鏌ユ壘璁℃暟璧风偣 + refer_sell_time_int = int(refer_sell_data[0].replace(":", "")) + begin_index = start_index + for i in range(start_index - 1, -1, -1): + data = total_datas[i] + val = data["val"] + if int(val["time"].replace(":", "")) < refer_sell_time_int: + begin_index = i + 1 + break + threshold_num = int(round(refer_sell_data[1] / gpcode_manager.get_limit_up_price_as_num(code) / 100)) + total_num = 0 + for i in range(begin_index, end_index + 1): + data = total_datas[i] + val = data["val"] + if L2DataUtil.is_limit_up_price_buy(val): + total_num += val["num"] + elif L2DataUtil.is_limit_up_price_buy_cancel(val): + total_num -= val["num"] + if total_num > threshold_num: + if code not in cls.__refer_sell_used_times: + cls.__refer_sell_used_times[code] = set() + cls.__refer_sell_used_times[code].add(refer_sell_data[0]) + return (begin_index, end_index), "鍙互涓嬪崟", f_buy_blocks + return None, "鎬讳拱棰濅笉婊¤冻", None + @classmethod def test__compute_active_order_begin_pos(cls, code, continue_count, start_index, end_index): return cls.__compute_active_order_begin_pos(code, continue_count, start_index, end_index) -- Gitblit v1.8.0