完善部分逻辑

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
+5 -3
View File
@@ -54,7 +54,6 @@ class QmtV(XtQuantTraderCallback):
def getStockPosition(self, stock_code: str):
print(f'获取股票持仓: {stock_code}, {self.xttrader.connected}, {self.account.account_id if self.account else None}') # pyright: ignore[reportAttributeAccessIssue]
positions = self.xttrader.query_stock_positions(self.account)
if positions:
for temp in positions:
@@ -94,7 +93,10 @@ class QmtV(XtQuantTraderCallback):
return self.cacheStockDetail(stock_code)['InstrumentName']
def dailyUpStop(self, stock_code:str):
return self.cacheStockDetail(stock_code)['UpStopPrice']
cacheStock = self.cacheStockDetail(stock_code)
PrintLog(LogLevel.INFO, f'- [成功]获取股票详情: {stock_code} {cacheStock["InstrumentName"]} {cacheStock['UpStopPrice']}')
return cacheStock['UpStopPrice']
def dailyDownStop(self, stock_code:str):
return self.cacheStockDetail(stock_code)['DownStopPrice']
@@ -135,7 +137,7 @@ class QmtV(XtQuantTraderCallback):
if tmpMarketStatus and self.isMarketActive:
if tmpTime - self.lastMarketDataUpdateTimestamp > 10: # 上次更新市场状态已经超过10秒
self.isMarketActive = False
PrintLog(LogLevel.INFO, f'- [市场状态变更] 市场已 inactive') # 市场已 inactive
PrintLog(LogLevel.INFO, f'- [市场状态] {self.isMarketActive}') # 市场已 inactive
# ====== 市场回调方法 -- 以下方法由XtQuantTrader调用 ======
+32 -11
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,13 +334,22 @@ 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:
if target.status == -1:
return "未配置交易参数"
elif target.status == 0:
if target.enabled:
return "▶ 运行中(未建初始仓)"
else:
return "⏸ 已停止(未建初始仓)"
else:
if target.enabled:
return "▶ 运行中"
else:
return "⏸ 已停止"
def populate_trade_table(self):
"""填充交易标的表格数据"""
for id, target in self.tradeTargetData.items():
@@ -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