完善部分逻辑

This commit is contained in:
2025-11-24 16:30:53 +08:00
parent e5b1d80139
commit 3ee47e95cf
2 changed files with 39 additions and 16 deletions
+34 -13
View File
@@ -48,7 +48,12 @@ class TradeTargetUI(ttk.Frame):
tradeTarget:SFGridTradeTarget = temp
pos = qmtv.getStockPosition(tradeTarget.stock_code)
tradeTarget.current_position = 0 if pos is None else pos.volume # type: ignore
self.targetAvgPrice[tradeTarget.get_id()] = pos.avg_price if pos is not None else 0.0
if pos is None:
self.targetAvgPrice[tradeTarget.get_id()] = 0.0
else:
self.targetAvgPrice[tradeTarget.get_id()] = pos.avg_price
PrintLog(LogLevel.INFO, f'- [成功]获取持仓信息: {tradeTarget.stock_code} {tradeTarget.targetName()} {tradeTarget.current_position} {pos.avg_price}')
self.updateTradeTarget(tradeTarget, True) # 初始化的时候
PrintLog(LogLevel.INFO, f'- [成功]交易标的信息初始化, 共 {len(self.tradeTargetData)} 个标的')
@@ -100,9 +105,12 @@ 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]
if id in self.targetAvgPrice:
pos = qmtv.getStockPosition(target.stock_code)
if pos is not None:
self.targetAvgPrice[id] = pos.avg_price
# UI CREATE
def create_ui(self):
@@ -189,14 +197,14 @@ class TradeTargetUI(ttk.Frame):
# 专业化的列配置
column_configs = {
"ID": (50, tk.CENTER),
"股票代码": (90, tk.CENTER),
"股票代码": (80, tk.CENTER),
"股票名称": (80, tk.E),
"市场价": (70, tk.E),
"当前持仓": (80, tk.E),
"建仓成本": (70, tk.E),
"平均成本": (70, tk.E),
"网格匹配次数": (90, tk.E),
"网格收益": (90, tk.E),
"建仓成本": (60, tk.E),
"平均成本": (60, tk.E),
"网格匹配次数": (60, tk.E),
"网格收益": (60, tk.E),
"交易状态": (80, tk.CENTER)
}
@@ -326,12 +334,21 @@ class TradeTargetUI(ttk.Frame):
# 发布事件通知主控制器添加标的
self.addTradeTarget(stock_code)
def get_trade_enabled_indicator(self, enabled: bool) -> str:
def get_trade_enabled_indicator(self, target: SFGridTradeTarget) -> str:
"""获取交易状态指示器"""
if enabled:
return "▶ 运行中"
if target.status == -1:
return "未配置交易参数"
elif target.status == 0:
if target.enabled:
return "▶ 运行中(未建初始仓)"
else:
return "⏸ 已停止(未建初始仓)"
else:
return "⏸ 已停止"
if target.enabled:
return "▶ 运行中"
else:
return "⏸ 已停止"
def populate_trade_table(self):
"""填充交易标的表格数据"""
@@ -343,10 +360,10 @@ 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}", # "建仓成本"
'-' if id not in self.targetMarketPrice else f"{self.targetAvgPrice[id]:.3f}", # "平均成本"
f"{self.targetAvgPrice[id]:.3f}", # "平均成本"
target.grid_match_count, # "网格匹配次数"
f"{target.grid_total_profit:.3f}", # "网格收益"
self.get_trade_enabled_indicator(target.enabled) # type: ignore
self.get_trade_enabled_indicator(target) # type: ignore
]
self.trade_table.insert('', tk.END, values=values)
@@ -818,6 +835,10 @@ class TradeTargetUI(ttk.Frame):
if not target:
return
if target.status < 0:
messagebox.showinfo("提示", f"{target.stock_code} ({target.stock_name}) 未配置交易参数, 请做交易设置。")
return
if target.enabled: # type: ignore
messagebox.showinfo("提示", f"{target.stock_code} ({target.stock_name}) 已经在运行中")
return