From 5c40d5d64fa6ab7a58f047e5960b7d1786213565 Mon Sep 17 00:00:00 2001 From: "GDP\\solonot" Date: Thu, 20 Nov 2025 14:20:18 +0800 Subject: [PATCH] update --- core/sfgrid/sfgrid_strategy.py | 18 +++++++++++------- core/sfgrid/sfgrid_ui.py | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/core/sfgrid/sfgrid_strategy.py b/core/sfgrid/sfgrid_strategy.py index c6e382e..2266f92 100644 --- a/core/sfgrid/sfgrid_strategy.py +++ b/core/sfgrid/sfgrid_strategy.py @@ -47,6 +47,7 @@ class SFGridStrategy: def refreshGridOrder(self): # 下网格单 if not qmtv.isMarketActive or not self.tradeTarget.enabled: + PrintLog(LogLevel.INFO, f'|- 市场 {qmtv.isMarketActive}, 策略 {self.getName()} {self.tradeTarget.enabled}, 不下单') return currentIdx:int = 0 @@ -67,7 +68,7 @@ class SFGridStrategy: ) self.orderGrid[1] = tmpOrderSeq # seq PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 初始化: 建仓单,建仓价: {price:.3f}') - else: + elif self.tradeTarget.status == 1: # 下网格单 currentIdx = self.tradeTarget.grid_index # type: ignore orders = qmtv.queryPendingOrder(self.tradeTarget.stock_code, self.getName()) # type: ignore @@ -76,7 +77,7 @@ class SFGridStrategy: sellIdx = currentIdx - 1 sellPrice = self.tradeTarget.getPriceGrid()[sellIdx] remark = f'{OrderTypeSell},{sellIdx},{self.tradeTarget.stock_code}' - if len([order for order in orders if order.order_type == xtconstant.STOCK_SELL and order.price == sellPrice]) == 0: + if len([order for order in orders if order.order_remark == remark]) == 0: # 网格节点没有卖单,下单 # 不存在策略内同价位订单,下单 tmpOrderSeq = qmtv.orderAsync( str(self.tradeTarget.stock_code), @@ -88,10 +89,11 @@ class SFGridStrategy: self.getName(), # strategy_name ) self.orderGrid[sellIdx] = tmpOrderSeq # seq - PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 初始化: 下空单,价格: {sellPrice:.3f}') + PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 网格策略: 下空单,价格: {sellPrice:.3f}') else: - PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 初始化: 已存在同价位空单,跳过下单') + PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 网格策略: 已存在同价位空单,跳过下单') if currentIdx < len(self.tradeTarget.getPriceGrid()) - 1: # 可以下多单 + print(f'length: {len(self.tradeTarget.getPriceGrid())}, currentIdx = {currentIdx}') buyIdx = currentIdx + 1 buyPrice = self.tradeTarget.getPriceGrid()[buyIdx] remark = f'{OrderTypeInit},{buyIdx},{self.tradeTarget.stock_code}' @@ -106,9 +108,11 @@ class SFGridStrategy: self.getName(), # strategy_name ) self.orderGrid[buyIdx] = tmpOrderSeq # seq - PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 初始化: 下多单,价格: {buyPrice:.3f}') + PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 网格策略: 下多单,价格: {buyPrice:.3f}') else: - PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 初始化: 已存在同价位多单,跳过下单') + PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 网格策略: 已存在同价位多单,跳过下单') + else: + PrintLog(LogLevel.INFO, f'|- 标的[{self.tradeTarget.targetName()}] 网格策略: 已过下边界,停止多单交易') def deleteTradeTarget(self, tradeTarget:model.SFGridTradeTarget): PrintLog(LogLevel.INFO, f'|- 标的{tradeTarget.targetName()}信息删除: START') @@ -196,7 +200,7 @@ class SFGridStrategy: self.tradeTarget.grid_match_count += 1 self.tradeTarget.grid_total_profit += self.tradeTarget.grid_size * trade.traded_volume self.tradeTarget.grid_index -= 1 - elif gridIdx == self.tradeTarget.grid_index: + else: type = "保持格, 理论上不应该输出" PrintLog(LogLevel.INFO, f'|- 委托成交通知[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name} - 原网格位置 {oriIdx}, 现网格位置 {self.tradeTarget.grid_index}') diff --git a/core/sfgrid/sfgrid_ui.py b/core/sfgrid/sfgrid_ui.py index c9c8582..dfb2f11 100644 --- a/core/sfgrid/sfgrid_ui.py +++ b/core/sfgrid/sfgrid_ui.py @@ -100,6 +100,7 @@ class TradeTargetUI(ttk.Frame): self.tradeTargetData[id] = target if id not in self.strategy_ctrl: + self.targetAvgPrice[id] = 0.0 self.stockCodeIdMap[target.stock_code] = id # type: ignore self.strategy_ctrl[id] = SFGridStrategy(target) # pyright: ignore[reportArgumentType] @@ -283,7 +284,7 @@ class TradeTargetUI(ttk.Frame): values = [ time_str, - data['stock_name']+f"{stock_code}", + data['stock_name']+f"-{stock_code}", f"{data['last_price']:.3f}", stock_code ] @@ -342,7 +343,7 @@ class TradeTargetUI(ttk.Frame): f"{self.targetMarketPrice[id]:.3f}" if id in self.targetMarketPrice else '-', # "市场价" target.current_position, # "当前持仓" '-' if target.init_price is None else f"{target.init_price:.3f}", # "建仓成本" - f"{self.targetAvgPrice[id]:.3f}" if id in self.targetMarketPrice else '-', # "平均成本" + '-' if id not in self.targetMarketPrice else f"{self.targetAvgPrice[id]:.3f}", # "平均成本" target.grid_match_count, # "网格匹配次数" f"{target.grid_total_profit:.3f}", # "网格收益" self.get_trade_enabled_indicator(target.enabled) # type: ignore