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