From dd76d8dc94da81299d796b5b90ae54c072454e86 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 18 十一月 2024 16:20:09 +0800
Subject: [PATCH] 买入策略修改

---
 l2/l2_data_manager_new.py |   55 ++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 42 insertions(+), 13 deletions(-)

diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py
index 9fa5594..bd0979b 100644
--- a/l2/l2_data_manager_new.py
+++ b/l2/l2_data_manager_new.py
@@ -17,6 +17,7 @@
 from l2.place_order_single_data_manager import L2TradeSingleDataProcessor
 from log_module import async_log_util, log_export
 from third_data import kpl_data_manager, block_info
+from trade.buy_radical.radical_buy_data_manager import EveryLimitupBigDealOrderManager
 from utils import global_util, tool, buy_condition_util, buy_strategy_util, trade_util
 import l2_data_util
 from db import redis_manager_delegate as redis_manager
@@ -2030,11 +2031,28 @@
             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)
             # 濡傛灉鏈夊ぇ鍗曟垚浜ゅ氨涓嶉渶瑕佺湅澶у崟
-            total_deal_money = BigOrderDealManager().get_total_buy_money(code)
+
+            if constant.CAN_RADICAL_BUY_NEED_BIG_ORDER_EVERYTIME:
+                # 姣忔涓嬪崟閮介渶瑕佸ぇ鍗�
+                total_deal_money = EveryLimitupBigDealOrderManager.get_big_buy_deal_order_money(code)
+            else:
+                # 鍙渶瑕佹�绘垚浜ょ殑澶у崟
+                total_deal_money = BigOrderDealManager().get_total_buy_money(code)
+            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]
             THRESHOLD_MONEY = 2990000
-            if total_deal_money >= THRESHOLD_MONEY:
+            if refer_sell_money >= 1e7:
+                THRESHOLD_MONEY = 2990000 * 2
+            else:
+                THRESHOLD_MONEY = 2990000
+            if  total_deal_money >= THRESHOLD_MONEY:
                 min_num = int(5000 / limit_up_price)
 
+            # 鎬诲鎵樺ぇ鍗曢噾棰�
+            total_delegating_big_money = 0
             single_index = None
             for i in range(start_index, end_index + 1):
                 data = total_datas[i]
@@ -2050,17 +2068,17 @@
                         # 鍒ゆ柇鏄惁涓哄ぇ鍗�
                         order_money = dealing_active_order_info[2] + round(val["price"], 2) * val["num"] * 100
                         if order_money >= bigger_money:
-                            total_deal_money += order_money
-                if total_deal_money >= THRESHOLD_MONEY:
-                    single_index = i
-                    break
+                            total_delegating_big_money += order_money
+                            if total_delegating_big_money + total_deal_money >= THRESHOLD_MONEY:
+                                single_index = i
+                                break
 
                 if int(val["orderNo"]) <= radical_data[1]:
                     # 涓诲姩涔板崟鍚庣殑鏁版嵁涓嶇畻
                     continue
 
-                total_deal_money += round(val["price"], 2) * val["num"] * 100
-                if total_deal_money >= THRESHOLD_MONEY:
+                total_delegating_big_money += round(val["price"], 2) * val["num"] * 100
+                if total_delegating_big_money + total_deal_money >= THRESHOLD_MONEY:
                     single_index = i
                     break
             if single_index is not None:
@@ -2074,14 +2092,22 @@
 
         if not radical_data:
             return False, None, "涓嶆弧瓒虫縺杩涗拱鐨勬潯浠�"
-        if t.time() > radical_data[0] and not is_radical_buy:
-            # 娌℃壂鍏ヨ繃鎵嶉渶瑕佸垽鏂椂闂�
-            return False, None, "瓒呰繃鐢熸晥鏃堕棿"
+
+        if constant.CAN_RADICAL_BUY_AT_LIMIT_UP:
+            # 鏉夸笂鏀鹃噺鍙壂鍏�
+            if t.time() > radical_data[0] and not is_radical_buy:
+                # 娌℃壂鍏ヨ繃鎵嶉渶瑕佸垽鏂椂闂�
+                return False, None, "瓒呰繃鐢熸晥鏃堕棿"
+        else:
+            # 鏉夸笂鏀鹃噺涓嶅彲鎵叆
+            if t.time() > radical_data[0]:
+                return False, None, "瓒呰繃鐢熸晥鏃堕棿"
+
         result = __can_order()
         l2_log.debug(code, f"L2鎵叆鍒ゆ柇锛歿result}")
         if result[0]:
-            # 宸茬粡鎵叆涓嬭繃鍗曠殑灏遍渶瑕佸垽鏂澘涓婃斁閲忕殑璺濈
-            if is_radical_buy:
+            # 宸茬粡鎵叆涓嬭繃鍗曚笖鍏佽鏉夸笂鏀鹃噺鎵叆鐨勫氨闇�瑕佸垽鏂澘涓婃斁閲忕殑璺濈
+            if is_radical_buy and constant.CAN_RADICAL_BUY_AT_LIMIT_UP:
                 is_limit_up_buy = cls.__is_at_limit_up_buy(code)
                 if is_limit_up_buy:
                     # 鍒ゆ柇鎴愪氦杩涘害鍒板綋鍓嶆暟鎹殑绗旀暟锛屽鏋滃皯浜�10绗斾笖杩樻湁鏈垚浜ょ殑澶у崟锛�>=299锛夊氨鍙互涓嬪崟
@@ -2098,6 +2124,9 @@
                                                                                        deal_codes)
                         if not buy_blocks:
                             return False, result[1], f"鏉垮潡浠g爜宸叉湁鎴愪氦锛歿radical_data[2]}"
+            # 濡傛灉鏉夸笂鏀鹃噺涓嶅彲涔板叆灏遍渶瑕佸垹闄や俊鍙�
+            if not constant.CAN_RADICAL_BUY_AT_LIMIT_UP and code in RadicalBuyDealCodesManager.buy_by_l2_delegate_expire_time_dict:
+                RadicalBuyDealCodesManager.buy_by_l2_delegate_expire_time_dict.pop(code)
             return True, result[1], radical_data[2]
         return result
 

--
Gitblit v1.8.0