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