From 326e0b138c00fe14ab860441b2e05f8c3c37576f Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期日, 25 五月 2025 12:01:56 +0800 Subject: [PATCH] 大单足够下单方式改变 --- l2/l2_data_manager_new.py | 147 +++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 143 insertions(+), 4 deletions(-) diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py index b1f6617..b943351 100644 --- a/l2/l2_data_manager_new.py +++ b/l2/l2_data_manager_new.py @@ -219,6 +219,67 @@ # round(t.time() * 1000) - start_time)) +class HumanRadicalBuySingleManager: + """ + 浜轰负涔板叆绠$悊 + """ + # 浜轰负涓嬪崟鏍囪:{"浠g爜":(淇″彿鏃堕棿, 闂撮殧鏃堕棿,淇″彿鎴嚦鏃堕棿, radical_result)} + __human_radical_buy_mark_info = {} + + @classmethod + def add_single(cls, code, latest_data, radical_result): + """ + 娣诲姞涔板叆淇″彿 + @param code: + @param latest_data: + @param radical_result: + @return: + """ + start_time_with_ms = L2DataUtil.get_time_with_ms(latest_data["val"]) + if tool.is_sh_code(code): + cls.__human_radical_buy_mark_info[code] = ( + start_time_with_ms, 400, tool.trade_time_add_millionsecond(start_time_with_ms, 3000), radical_result) + else: + cls.__human_radical_buy_mark_info[code] = ( + start_time_with_ms, 30, tool.trade_time_add_millionsecond(start_time_with_ms, 2000), radical_result) + + @classmethod + def remove_single(cls, code): + """ + 绉婚櫎淇″彿 + @param code: + @return: + """ + if code in cls.__human_radical_buy_mark_info: + cls.__human_radical_buy_mark_info.pop(code) + + @classmethod + def has_single(cls, code): + """ + 鏄惁鏈変俊鍙� + @param code: + @return: + """ + if code in cls.__human_radical_buy_mark_info: + return True + + @classmethod + def is_valid(cls, code, data): + """ + 淇″彿鏄惁鏈夋晥 + @param code: + @return: 鏄惁鏈夋晥锛屾棤鏁堟秷鎭�/鏈夋晥瀵硅薄 + """ + if code not in cls.__human_radical_buy_mark_info: + return False, "娌℃湁浜轰拱鍏ヤ俊鍙�" + single_time_ms, space_time_ms, expire_time_ms, _ = cls.__human_radical_buy_mark_info[code] + if tool.trade_time_sub_with_ms(L2DataUtil.get_time_with_ms(data["val"]), + expire_time_ms) > 0: + cls.__human_radical_buy_mark_info.pop(code) + return False, "瓒呰繃淇″彿鐢熸晥鏃堕棿" + return True, cls.__human_radical_buy_mark_info[code] + + class L2TradeDataProcessor: unreal_buy_dict = {} volume_rate_info = {} @@ -1458,10 +1519,32 @@ _start_time = tool.get_now_timestamp() total_datas = local_today_datas[code] - # ---------璁$畻婵�杩涗拱鍏ョ殑淇″彿--------- - radical_result = cls.__compute_radical_order_begin_pos(code, compute_start_index, compute_end_index) + if not HumanRadicalBuySingleManager.has_single(code): + # ---------璁$畻婵�杩涗拱鍏ョ殑淇″彿--------- + radical_result = cls.__compute_radical_order_begin_pos(code, compute_start_index, compute_end_index) + else: + human_radical_result = cls.__compute_human_radical_order_begin_pos(code, compute_start_index, + compute_end_index) + if human_radical_result[0]: + radical_result = list(human_radical_result[2]) + # 鏀瑰彉鎵ц浣嶇疆 + radical_result[1] = human_radical_result[1]["index"] + else: + radical_result = None + if radical_result and radical_result[0]: - if radical_result[0]: + if not HumanRadicalBuySingleManager.has_single(code): + big_order_deal_enough_result = radical_buy_data_manager.is_big_order_deal_enough(code, + code_volumn_manager.CodeVolumeManager().get_volume_rate_refer_in_5days( + code), 0) + if big_order_deal_enough_result[6] <= 0: + HumanRadicalBuySingleManager.add_single(code, total_datas[-1], radical_result) + async_log_util.info(logger_l2_not_buy_reasons, f"{code}#澶у崟瓒冲锛岄渶瑕佹牴鎹汉涓轰笅鍗�") + return + # 涓嬪崟鍓嶄竴姝ワ紝绉婚櫎浜轰负涓嬪崟淇″彿 + is_human_radical_buy = HumanRadicalBuySingleManager.has_single(code) + HumanRadicalBuySingleManager.remove_single(code) + buy_single_index, buy_exec_index = radical_result[1], radical_result[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"][ @@ -1479,7 +1562,7 @@ max_num_set=set(), buy_volume_rate=buy_volume_rate, mode=OrderBeginPosInfo.MODE_RADICAL, - mode_desc=f"澶у崟涓嶈冻鎵叆:{radical_result[2]}", + mode_desc=f"澶у崟涓嶈冻鎵叆:{radical_result[2]} 鏄惁璺熶汉涔板叆-{is_human_radical_buy}", sell_info=sell_info, threshold_money=threshold_money) order_begin_pos_info.at_limit_up = cls.__is_at_limit_up_buy(code) @@ -2089,6 +2172,62 @@ async_log_util.info(logger_l2_not_buy_reasons, f"{code}#{result[2]}") return result + @classmethod + def __compute_human_radical_order_begin_pos(cls, code, start_index, end_index): + """ + 澶勭悊璺熶汉涔� + @param code: + @param start_index: + @param end_index: + @return: + """ + total_datas = local_today_datas.get(code) + result = HumanRadicalBuySingleManager.is_valid(code, total_datas[start_index]) + if not result[0]: + return False, None, result[1] + result = result[1] + single_time_ms, space_time_ms, expire_time_ms, radical_result = result[0], result[1], result[2], result[3] + + bigger_num = l2_data_util.get_big_money_val(gpcode_manager.get_limit_up_price_as_num(code), + tool.is_ge_code(code)) // ( + gpcode_manager.get_limit_up_price_as_num(code) * 100) + canceled_buyno_map = local_today_buyno_map.get(code) + for i in range(start_index, end_index + 1): + data = total_datas[i] + val = data["val"] + if not L2DataUtil.is_limit_up_price_buy(val): + continue + if val["num"] < bigger_num: + continue + + left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i, + total_datas, + canceled_buyno_map) + if left_count == 0: + continue + + # 鍒ゆ柇鏄惁瓒呰繃鐢熸晥鏃堕棿 + if tool.trade_time_sub_with_ms(L2DataUtil.get_time_with_ms(total_datas[i]["val"]), + expire_time_ms) > 0: + HumanRadicalBuySingleManager.remove_single(code) + return False, None, "瓒呰繃淇″彿鐢熸晥鏃堕棿" + is_valid = False + # 鍒ゆ柇璺濈涓婁釜50w涔板崟鐨勬椂闂存槸鍚﹁秴杩囦簡space_time_ms + for ii in range(i - 1, -1, -1): + data_child = total_datas[ii] + val_child = data_child["val"] + if not L2DataUtil.is_limit_up_price_buy(val_child): + continue + if val_child["num"] * float(val_child["price"]) < 5000: + continue + if tool.trade_time_sub_with_ms(L2DataUtil.get_time_with_ms(val), + L2DataUtil.get_time_with_ms(val_child)) > space_time_ms: + is_valid = True + break + if is_valid: + return True, data, radical_result + return False, None, "娌℃湁鏈夋晥淇″彿" + # 鎬诲崠棰濆弬鑰冩椂闂翠娇鐢ㄨ褰� __refer_sell_used_times = {} -- Gitblit v1.8.0