This commit is contained in:
2025-11-12 10:48:43 +08:00
parent ba9cd9a700
commit 0d54f8b05a
2 changed files with 31 additions and 17 deletions
+2 -5
View File
@@ -55,13 +55,9 @@ class SFGridStrategy:
print(f'|- 检查交易状态[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}] - {self.tradeTarget.enabled}')
return bool(self.tradeTarget.enabled) # 修复返回类型问题
def onDataUpdate(self, data):
def onDataUpdate(self, inTradeTarget:model.SFGridTradeTarget):
print(f'|- 市价更新[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}] - START')
lastPrice = float("{:.3f}".format(data[self.tradeTarget.stock_code]['lastPrice']))
self.tradeTarget.market_price = lastPrice # type: ignore
self.saveProxy()
if not is_trading_time():
print(f"|- 市价更新[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}] - 非交易时间,不进行自动交易")
return
@@ -74,6 +70,7 @@ class SFGridStrategy:
print(f'|- 市价更新[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}] - LOCKED')
try:
lastPrice = inTradeTarget.market_price
orderPrice:float = -1
orderType = -1
index: int = self.tradeTarget.grid_index # pyright: ignore[reportAssignmentType]
+29 -12
View File
@@ -20,7 +20,9 @@ class TradeTargetUI(ttk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.tradeTargetData:dict[int, SFGridTradeTarget] = {} # id->trade_target
self.stockCodeIdMap:dict[str, int] = {}
self.strategy_ctrl:dict[int, SFGridStrategy] = {} # stock_code->trade_target
self.listening_stock = []
self.init_trade_target_pool()
eBus.event_bus.subscribe(eBus.MarketDataUpdate, self.onMarketDataUpdated)
@@ -36,19 +38,30 @@ class TradeTargetUI(ttk.Frame):
self.start_ui_refresh()
def onMarketDataUpdated(self, data):
# 更新市场监控数据
for item in data:
if item['stock_code'] in self.tradeTargetData:
# 更新交易标准池信息
continue
# 收集所有市场数据用于市场监控
for stock_code, tickData in data.items():
id = self.stockCodeIdMap.get(stock_code)
if id is not None and stock_code in self.tradeTargetData:
tradeTarget = self.tradeTargetData[id]
PrintLog(LogLevel.INFO, f' [市价更新 序号-{id}] {stock_code} - {tickData}')
lastPrice = float("{:.3f}".format(tickData['lastPrice']))
tradeTarget.market_price = lastPrice # type: ignore
stock_controller: SFGridStrategy = self.strategy_ctrl[id]
stock_controller.onDataUpdate(tradeTarget)
else:
# 监控10元的票
current_time = datetime.now().strftime("%H:%M:%S")
self.marketData[str(item['stock_code'])] = {
'stock_name': item['stock_name'],
'last_price': item['market_price'] if item['market_price'] is not None else 0.0,
'time': current_time
}
# 非目标交易,发布市场数据更新事件用于市场监控
lastPrice = tickData['lastPrice']
if lastPrice == 10 or stock_code in self.listening_stock:
PrintLog(LogLevel.INFO, f' [市价更新 序号-X] {stock_code} - {lastPrice}')
# 发布市场数据更新事件用于市场监控
market_target = SFGridTradeTarget()
market_target.stock_code = stock_code
market_target.stock_name = qmtv.getInstrumentName(stock_code) # type: ignore
market_target.market_price = lastPrice # type: ignore
if stock_code not in self.listening_stock:
self.listening_stock.append(stock_code)
def refresh_targets(self):
# 更新标的池
@@ -56,6 +69,7 @@ class TradeTargetUI(ttk.Frame):
for temp in results:
result :SFGridTradeTarget = temp
self.tradeTargetData[result.get_id()] = result
self.stockCodeIdMap[str(result.stock_code)] = result.get_id()
def init_trade_target_pool(self):
@@ -85,6 +99,7 @@ class TradeTargetUI(ttk.Frame):
"""刷新循环"""
while self.refresh_thread_running:
# 在主线程中更新UI
PrintLog(LogLevel.INFO, "刷新UI")
self.after(0, self.refresh_table)
time.sleep(0.5) # 每0.5秒刷新一次
@@ -103,6 +118,7 @@ class TradeTargetUI(ttk.Frame):
def updateTradeTarget(self, target: SFGridTradeTarget):
# 更新或添加数据到本地缓存
self.tradeTargetData[target.get_id()] = target
self.stockCodeIdMap[target.stock_code] = target.get_id() # type: ignore
def create_ui(self):
"""创建UI界面"""
@@ -442,6 +458,7 @@ class TradeTargetUI(ttk.Frame):
del self.tradeTargetData[id]
del self.strategy_ctrl[id]
del self.stockCodeIdMap[str(target.stock_code)]
# 添加日志
PrintLog(LogLevel.INFO, f"交易标的已删除,ID: {id} {target.targetName()}")
except Exception as e: