From 245979e3907d34bcd88ac0c4547f399bf33a44de Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 18 六月 2025 18:13:30 +0800
Subject: [PATCH] bug修复/策略完善

---
 strategy/strategy_manager.py |   74 ++++++++++++++++++++++++-------------
 1 files changed, 48 insertions(+), 26 deletions(-)

diff --git a/strategy/strategy_manager.py b/strategy/strategy_manager.py
index 0f2d336..a9c585c 100644
--- a/strategy/strategy_manager.py
+++ b/strategy/strategy_manager.py
@@ -8,7 +8,7 @@
 from db.mysql_data_delegate import Mysqldb
 from db.redis_manager_delegate import RedisUtils
 from log_module import async_log_util
-from log_module.log import logger_trade
+from log_module.log import logger_trade, logger_debug
 from strategy.data_analyzer import KPLLimitUpDataAnalyzer
 from strategy.low_suction_strategy import LowSuctionOriginDataExportManager
 from strategy.strategy_params_settings import StrategyParamsSettingsManager
@@ -16,7 +16,7 @@
 from strategy.strategy_variable_factory import DataLoader, StrategyVariableFactory
 import constant
 from third_data import kpl_util
-from trade.trade_manager import DealCodesManager
+from trade.trade_manager import DealCodesManager, PlatePlaceOrderManager
 from utils import huaxin_util, tool
 
 
@@ -105,7 +105,7 @@
     """
 
     def __init__(self, day, script_name="strategy_script_v6.py",
-                 settings=StrategyParamsSettingsManager().get_settings(), need_load_data = False):
+                 settings=StrategyParamsSettingsManager().get_settings(), need_load_data=False):
         self.now_day = day
         # 涔板ぇ鍗曪細{浠g爜:[澶у崟鏁版嵁]}
         self.big_order_buy = {}
@@ -116,7 +116,8 @@
         # 鍘嗗彶鏃鏁版嵁
         self.kline_data = {}
         # 鍘嗗彶娑ㄥ仠鏁版嵁
-        self.limit_up_record_data = {}
+        self.limit_up_record_data_dict = {}
+        self.limit_up_record_data_list = {}
         # 鍘嗗彶鏁版嵁
         self.timeline_data = {}
         # 浠婃棩鏁版嵁
@@ -170,13 +171,17 @@
         trade_days = self.data_loader.trade_days
         # 鍔犺浇鍘嗗彶鏁版嵁
         self.kline_data = self.data_loader.load_kline_data()
-        self.limit_up_record_data = self.data_loader.load_limit_up_data()
+        self.limit_up_record_data_list = self.data_loader.load_limit_up_data()
+        for d in self.limit_up_record_data_list:
+            if d[0] not in self.limit_up_record_data_dict:
+                self.limit_up_record_data_dict[d[0]] = []
+            self.limit_up_record_data_dict[d[0]].append(d)
         self.next_trade_day = self.data_loader.load_next_trade_day()
         if not trade_days:
             raise Exception("浜ゆ槗鏃ュ巻鑾峰彇澶辫触")
         if not self.kline_data:
             raise Exception("鍘嗗彶鏃鑾峰彇澶辫触")
-        if not self.limit_up_record_data:
+        if not self.limit_up_record_data_list:
             raise Exception("鍘嗗彶娑ㄥ仠鑾峰彇澶辫触")
 
     def __load_current_date_data_by_timeline(self):
@@ -233,7 +238,7 @@
             return
         stock_variables = StrategyVariableFactory.create_from_history_data(
             self.kline_data.get(code_), None,
-            self.limit_up_record_data.get(code_), self.data_loader.trade_days)
+            self.limit_up_record_data_dict.get(code_), self.data_loader.trade_days)
 
         # 鍔犺浇浠婃棩娑ㄥ仠浠�
         pre_close = self.kline_data.get(code_)[0]["close"]
@@ -249,10 +254,10 @@
             days = self.data_loader.trade_days[:day]
             stock_variables.__setattr__(f"鏃ュ嚭鐜扮殑鏉垮潡_{day}",
                                         KPLLimitUpDataAnalyzer.get_limit_up_reasons(
-                                            self.limit_up_record_data, min_day=days[-1],
+                                            self.limit_up_record_data_list, min_day=days[-1],
                                             max_day=days[0]))
         stock_variables.杩炵画鑰侀鏉� = KPLLimitUpDataAnalyzer.get_continuous_limit_up_reasons(
-            self.limit_up_record_data, self.data_loader.trade_days[:2])
+            self.limit_up_record_data_list, self.data_loader.trade_days[:2])
 
         # 鍔犺浇Tick淇℃伅
         open_price_info = TickSummaryDataManager().open_price_info_dict.get(code_)
@@ -274,21 +279,31 @@
         @param big_orders: [(浠g爜, 涔�/鍗�, [璁㈠崟鍙�,閲�,閲戦,鏈�鍚庢椂闂存埑,鏈�鍚庝环鏍�, 鍒濆鏃堕棿鎴�, 鍒濆浠锋牸])] 濡傦細[ ('002741', 0, [475820, 91600, 1610328, 92500000, 17.58, 92500000, 17.58])]
         @return:
         """
+        big_orders = [x for x in big_orders if x[0] in self.fcodes]
         codes = []
         for d in big_orders:
-            code = d[0]
-            if d[1] == 0:
-                # 涔板崟
-                if code not in self.big_order_buy:
-                    self.big_order_buy[code] = []
-                self.big_order_buy[code].append(d[2])
-            else:
-                # 鍗栧崟
-                if code not in self.big_order_sell:
-                    self.big_order_sell[code] = []
-                self.big_order_sell[code].append(d[2])
-                if code not in codes:
-                    codes.append(code)
+            try:
+                code = d[0]
+                # 鍙绠�200w浠ヤ笂鐨勪拱鍗�
+                if d[2][2] < 200e4:
+                    continue
+                if d[1] == 0:
+                    # 涔板崟
+                    if code not in self.big_order_buy:
+                        self.big_order_buy[code] = []
+                    self.big_order_buy[code].append(d[2])
+                else:
+                    # 鍗栧崟
+                    if code not in self.big_order_sell:
+                        self.big_order_sell[code] = []
+                    self.big_order_sell[code].append(d[2])
+                    if code not in codes:
+                        codes.append(code)
+                # 璁剧疆鐜颁环
+                if code in self.stock_variables_dict:
+                    self.stock_variables_dict[code].褰撳墠浠� = d[2][4]
+            except Exception as e:
+                logger_debug.error(f"{d}")
             # 椹卞姩涓嬪崟
         for code in codes:
             self.__run(code, self.stock_variables_dict.get(code))
@@ -376,10 +391,14 @@
         # 娉ㄥ叆鏉垮潡娴佸叆淇℃伅
         if self.current_block_in_datas:
             sv.璧勯噾娴佸叆鏉垮潡 = self.current_block_in_datas
-        # 娉ㄥ叆宸叉垚浜や唬鐮�
-        place_order_plate_codes = DealCodesManager().get_place_order_plate_codes()
+        # 娉ㄥ叆宸叉垚浜や唬鐮�,鎴愪氦浠g爜浠ュ鎵樻暟鎹潵璁$畻
+        place_order_plate_codes = PlatePlaceOrderManager().get_plate_codes()
         sv.鏉垮潡鎴愪氦浠g爜 = place_order_plate_codes
-        sv.鎴愪氦浠g爜 = DealCodesManager().get_deal_codes()
+
+        code_sets = [set(lst) for lst in place_order_plate_codes.values()]
+        # 2. 浣跨敤 set.union() 姹傚苟闆�
+        union_code_sets = set().union(*code_sets)
+        sv.鎴愪氦浠g爜 = union_code_sets
         global_dict = {
             "sv": sv,
             "target_code": code,
@@ -392,8 +411,11 @@
                 return
             # 鍙互涓嬪崟
             # 鍒ゆ柇鏄惁鍙互涔�
+            order_ref = huaxin_util.create_order_ref()
+            price = tool.get_buy_max_price(sv.褰撳墠浠�)
+            volume = 100
+            DealCodesManager().place_order(set(compute_result[3]), code, order_ref, price, volume)
             for b in compute_result[3]:
-                DealCodesManager().place_order(b, code)
                 async_log_util.info(logger_trade, f"{code}涓嬪崟锛屾澘鍧楋細{compute_result[3]}")
 
 

--
Gitblit v1.8.0