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