update
This commit is contained in:
+41
-1
@@ -17,7 +17,7 @@ from core.logger import LogLevel, PrintLog
|
||||
from core.sfgrid.model import SFGridTradeTarget, STRATEGY_TYPE_GRID
|
||||
from core.sfgrid.sfgrid_strategy import SFGridStrategy
|
||||
from core.eventbus import event_bus, MarketDataUpdate, EventMarketActiveSwitch
|
||||
from core.sfgrid.bus_events import EventTradeTargetUpdate
|
||||
from core.sfgrid.bus_events import EventTradeTargetUpdate, EventPoolMark
|
||||
|
||||
# ── 工具函数 ──
|
||||
_ORDER_STATUS = {48: '未报', 49: '待报', 50: '已报', 51: '已报待撤', 52: '部成待撤',
|
||||
@@ -78,6 +78,7 @@ class _DataStore:
|
||||
self.monitorPrice: float = 10.0
|
||||
self.marketLog: dict[str, dict] = {} # stock_code → {name, price, time}
|
||||
self.listeningStocks: list = []
|
||||
self.poolLog: list[str] = [] # 股票池管理器日志(list,方便 append)
|
||||
|
||||
# ── 初始化 ──
|
||||
|
||||
@@ -903,6 +904,9 @@ class _DrawerPanel:
|
||||
ft.Container(ft.Divider(height=20), width=2),
|
||||
ft.ElevatedButton("同步数据", on_click=lambda e: self._run_sync(['kline', 'stocks', 'industry', 'market', 'sector']), height=32),
|
||||
ft.ElevatedButton("执行评分", on_click=lambda e: self._run_scoring(), height=32),
|
||||
ft.Container(ft.Divider(height=20), width=2),
|
||||
ft.ElevatedButton("沉寂检测", on_click=lambda e: self._data._pool_manager.trigger_slumber(), height=32, tooltip="手动触发沉寂检测(阶段一标记)"),
|
||||
ft.ElevatedButton("淘汰检测", on_click=lambda e: self._data._pool_manager.trigger_weekly_elim(), height=32, tooltip="手动触发周度淘汰检测(阶段一标记)"),
|
||||
self._score_status,
|
||||
], spacing=6, vertical_alignment=ft.CrossAxisAlignment.CENTER)
|
||||
return ft.Column([
|
||||
@@ -1329,8 +1333,14 @@ class QmtApp:
|
||||
event_bus.subscribe(MarketDataUpdate, self._on_market_data)
|
||||
event_bus.subscribe(EventMarketActiveSwitch, self._on_market_active)
|
||||
event_bus.subscribe(EventTradeTargetUpdate, lambda t: self._refresh_ui())
|
||||
event_bus.subscribe(EventPoolMark, self._on_pool_mark)
|
||||
threading.Thread(target=self._refresh_loop, daemon=True).start()
|
||||
|
||||
# 启动股票池管理器(阶段一:T日标记)
|
||||
from core.sfgrid.pool_manager import PoolManager
|
||||
self._data._pool_manager = PoolManager()
|
||||
self._data._pool_manager.start()
|
||||
|
||||
def _show_error(self, msg: str):
|
||||
self.page.clean()
|
||||
self.page.add(ft.Container(
|
||||
@@ -1434,6 +1444,36 @@ class QmtApp:
|
||||
self._prices_loaded = True
|
||||
self._refresh_ui()
|
||||
|
||||
def _on_pool_mark(self, data: dict):
|
||||
"""响应股票池标记事件,在日志区显示"""
|
||||
action = data.get('action', '')
|
||||
count = data.get('count', 0)
|
||||
codes = data.get('stock_codes', [])
|
||||
if action == 'scoring':
|
||||
msg = f'[池] 评分完成,共 {count} 只候选'
|
||||
elif action == 'liquidate':
|
||||
msg = f'[池] 沉寂检测完成,标记 {count} 只股: {", ".join(codes)}'
|
||||
elif action == 'eliminate':
|
||||
msg = f'[池] 周度淘汰检测完成,标记 {count} 只股: {", ".join(codes)}'
|
||||
else:
|
||||
msg = f'[池] 未知事件: {data}'
|
||||
self._data.poolLog.append(msg)
|
||||
# 追加到 UI 日志
|
||||
if hasattr(self, '_pool_log_text') and self._pool_log_text:
|
||||
log = self._pool_log_text
|
||||
log.value = '\n'.join(self._data.poolLog[-200:]) if self._data.poolLog else ''
|
||||
log.update()
|
||||
from core.logger import PrintLog, LogLevel
|
||||
PrintLog(LogLevel.INFO, msg)
|
||||
|
||||
def trigger_pool_slumber(self):
|
||||
"""供 UI 按钮手动触发沉寂检测"""
|
||||
self._data._pool_manager.trigger_slumber()
|
||||
|
||||
def trigger_pool_elim(self):
|
||||
"""供 UI 按钮手动触淘汰检测"""
|
||||
self._data._pool_manager.trigger_weekly_elim()
|
||||
|
||||
def _on_market_active(self, is_active: bool):
|
||||
from core.logger import PrintLog, LogLevel
|
||||
PrintLog(LogLevel.INFO, f'[UI] 收到市场状态切换事件 is_active={is_active}')
|
||||
|
||||
Reference in New Issue
Block a user