From 672cc66070f30468222bfcfd527d9090d08f8cce Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期日, 16 三月 2025 22:06:49 +0800 Subject: [PATCH] 新版下单方式修改 --- l2/l2_data_manager_new.py | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 106 insertions(+), 4 deletions(-) diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py index b8df835..fa813f1 100644 --- a/l2/l2_data_manager_new.py +++ b/l2/l2_data_manager_new.py @@ -1314,14 +1314,14 @@ # 鎵叆涓嬪崟鍙湁L鎾よ兘鎾ゅ崟 if order_begin_pos and order_begin_pos.mode == OrderBeginPosInfo.MODE_RADICAL and cancel_type not in { trade_constant.CANCEL_TYPE_L_DOWN, trade_constant.CANCEL_TYPE_L, trade_constant.CANCEL_TYPE_RD, - trade_constant.CANCEL_TYPE_P}: + trade_constant.CANCEL_TYPE_P, trade_constant.CANCEL_TYPE_F}: l2_log.cancel_debug(code, "鎾ゅ崟涓柇锛屽師鍥狅細{}", "鎵叆涓嬪崟涓嶆槸L鎾�") return False # 鍔犵豢鍙湁L鎾�/浜烘挙鐢熸晥 if gpcode_manager.GreenListCodeManager().is_in_cache(code): if cancel_type not in {trade_constant.CANCEL_TYPE_L, trade_constant.CANCEL_TYPE_L_UP, trade_constant.CANCEL_TYPE_L_DOWN, trade_constant.CANCEL_TYPE_RD, - trade_constant.CANCEL_TYPE_P}: + trade_constant.CANCEL_TYPE_P, trade_constant.CANCEL_TYPE_F}: l2_log.cancel_debug(code, "鎾ゅ崟涓柇锛屽師鍥狅細{}", "鍔犵豢涓嶆槸L鎾�") return False @@ -1474,7 +1474,8 @@ RDCancelBigNumComputer().set_watch_indexes(code, radical_result[4]) return else: - radical_result = cls.__compute_radical_order_begin_pos_for_many_sell(code, compute_start_index, compute_end_index) + radical_result = cls.__compute_radical_order_begin_pos_for_many_sell(code, compute_start_index, + compute_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] @@ -1928,6 +1929,103 @@ limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) bigger_money = l2_data_util.get_big_money_val(limit_up_price, tool.is_ge_code(code)) min_num = int(bigger_money / limit_up_price / 100) + refer_sell_data = L2MarketSellManager().get_refer_sell_data(code, radical_data[3]) + # 鍙傝�冩�诲崠棰� + refer_sell_money = 0 + if refer_sell_data: + refer_sell_money = refer_sell_data[1] + 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), + refer_sell_money, + for_buy=True, + is_almost_open_limit_up= + radical_data[5]) + # 缂轰箯鐨勫ぇ鍗曢噾棰� + lack_money = big_order_deal_enough_result[3] + # 濡傛灉鏈夊ぇ鍗曟垚浜ゅ氨涓嶉渶瑕佺湅澶у崟 + if constant.CAN_RADICAL_BUY_NEED_BIG_ORDER_EVERYTIME: + # 姣忔涓嬪崟閮介渶瑕佸ぇ鍗� + current_big_order_deal_money_info = EveryLimitupBigDealOrderManager.get_big_buy_deal_order_money_info( + code) + if current_big_order_deal_money_info and tool.trade_time_sub(tool.get_now_time_str(), + current_big_order_deal_money_info[1]) > 60: + # 60s浠ヤ笂灏变笉涓嬪崟浜� + return False, None, "璺濈涓婃缁熻澶у崟鏃堕棿杩囧幓60s", set() + + if lack_money == 0: + if not tool.is_sh_code(code): + # 闈炰笂璇佺殑绁ㄧ湅50w + min_num = int(5000 / limit_up_price) + # 闇�瑕佺洃鍚殑澶у崟 + watch_indexes = set() + # 鎬诲鎵樺ぇ鍗曢噾棰� + total_delegating_big_money = 0 + single_index = None + # 浠庢垚浜よ繘搴︿綅寮�濮嬬湅 + trade_index, is_default = cls.__TradeBuyQueue.get_traded_index(code) + if trade_index is None: + trade_index = 0 + canceled_buyno_map = local_today_canceled_buyno_map.get(code) + for i in range(trade_index, end_index + 1): + data = total_datas[i] + val = data["val"] + if not L2DataUtil.is_limit_up_price_buy(val): + continue + if val["num"] < min_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 i == start_index and tool.is_sh_code(code): + dealing_active_order_info = HuaXinBuyOrderManager().get_dealing_active_order_info(code) + if dealing_active_order_info and dealing_active_order_info[0] == int(val["orderNo"]): + # 鍒ゆ柇鏄惁涓哄ぇ鍗� + order_money = dealing_active_order_info[2] + round(val["price"], 2) * val["num"] * 100 + if order_money >= bigger_money: + lack_money -= order_money + watch_indexes.add(i) + if lack_money < 0: + single_index = i + break + + if int(val["orderNo"]) <= radical_data[1]: + # 涓诲姩涔板崟鍚庣殑鏁版嵁涓嶇畻 + continue + watch_indexes.add(i) + lack_money -= round(val["price"], 2) * val["num"] * 100 + if lack_money < 0: + single_index = i + break + if single_index is not None: + return True, single_index, "鏈夊ぇ鍗�", watch_indexes + return False, None, f"澶у崟涓嶈冻锛歿trade_index}-{end_index} 缂哄皯鐨勫ぇ鍗�-{lack_money}", watch_indexes + + def __can_order_v2(): + # 鍒ゆ柇鏄惁鏄澘涓婃斁閲� + if cls.__is_at_limit_up_buy(code, start_index): + return False, None, "鏉夸笂鏀鹃噺", None + total_datas = local_today_datas[code] + limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) + bigger_money = l2_data_util.get_big_money_val(limit_up_price, tool.is_ge_code(code)) + min_num = int(bigger_money / limit_up_price / 100) + # 缁熻濮旀墭澶т拱鍗� + bigger_money_delegate_list = [] + for i in range(start_index, end_index + 1): + val = total_datas[i] + if val["num"] < min_num: + continue + if not L2DataUtil.is_limit_up_price_buy(val): + continue + bigger_money_delegate_list.append( + (val["orderNo"], int(float(val["price"]) * val["num"] * 100), val["time"])) + radical_buy_data_manager.EveryLimitupBigDelegateOrderManager.add_big_buy_order_delegate(code, + bigger_money_delegate_list) refer_sell_data = L2MarketSellManager().get_refer_sell_data(code, radical_data[3]) # 鍙傝�冩�诲崠棰� @@ -2018,13 +2116,15 @@ # 鏉夸笂鏀鹃噺鍙壂鍏� if t.time() > radical_data[0] and not is_radical_buy: # 娌℃壂鍏ヨ繃鎵嶉渶瑕佸垽鏂椂闂� + radical_buy_data_manager.EveryLimitupBigDelegateOrderManager.clear(code, '瓒呰繃鐢熸晥鏃堕棿') return False, None, "瓒呰繃鐢熸晥鏃堕棿" else: # 鏉夸笂鏀鹃噺涓嶅彲鎵叆 if t.time() > radical_data[0]: + radical_buy_data_manager.EveryLimitupBigDelegateOrderManager.clear(code, '瓒呰繃鐢熸晥鏃堕棿') return False, None, "瓒呰繃鐢熸晥鏃堕棿" - result = __can_order() + result = __can_order_v2() l2_log.debug(code, f"L2鎵叆鍒ゆ柇锛歿result}") if result[0]: # 宸茬粡鎵叆涓嬭繃鍗曚笖鍏佽鏉夸笂鏀鹃噺鎵叆鐨勫氨闇�瑕佸垽鏂澘涓婃斁閲忕殑璺濈 @@ -2065,6 +2165,8 @@ @param end_index: @return: 淇″彿淇℃伅锛堜俊鍙蜂綅,鎵ц浣嶏級, 娑堟伅, 鍙拱鍏ョ殑鏉垮潡 """ + if True: + return None, "鏆備笉鐢熸晥", None if not tool.is_sz_code(code): return None, "闈炴繁璇佺殑绁�", None # 鍒ゆ柇鎶涘帇鏄惁澶т簬5000w -- Gitblit v1.8.0