第一个Alpha版本

This commit is contained in:
2025-11-14 18:09:20 +08:00
parent cd67c9ad60
commit 6810b55cbb
8 changed files with 31 additions and 18 deletions
-1
View File
@@ -10,7 +10,6 @@ MarketOrderTraded = "market_order_traded"
# Pring Log
EventPrintLog = "print_log"
class EventBus:
def __init__(self):
self.listeners = {} # 管理各种event的订阅情况
+10 -1
View File
@@ -1,21 +1,30 @@
import tkinter as tk
from tkinter import ttk
from core.logger import LogLevel
from core.qmt import qmtv
from core.sfgrid.sfgrid_ui import TradeTargetUI
from tkinter import ttk, messagebox
class MainWindow:
def __init__(self):
self.root = tk.Tk()
self.root.title("神之一手 - 交易系统")
self.root.geometry("1400x700")
# 当前选中的策略Tab索引
self.current_strategy_index = 0
# 存储各个Frame的引用
self.strategy_frames = {}
# 日志面板可见性标志
self.log_visible = False
result:bool = qmtv.connect()
if not result:
messagebox.showinfo("提示", "QMT连接失败,请修改配置文件。")
self.root.destroy()
return
# 创建界面
print(f'创建界面')
self.create_ui()
+10 -6
View File
@@ -23,7 +23,7 @@ class QmtV(XtQuantTraderCallback):
self.xttrader = XtQuantTrader(config.miniQMTPath, sessionId)
xtdata.enable_hello = False
def connect(self):
def connect(self) -> bool:
self.xttrader.register_callback(self)
self.xttrader.start()
self.xttrader.connect()
@@ -31,7 +31,7 @@ class QmtV(XtQuantTraderCallback):
PrintLog(LogLevel.INFO, f'- [{'成功' if self.xttrader.connected else '失败'}]市场交易连接: {config.miniQMTPath}')
if self.xttrader.connected == False:
self.inited = False
return
return self.inited
else:
self.inited = True
@@ -41,8 +41,9 @@ class QmtV(XtQuantTraderCallback):
PrintLog(LogLevel.INFO, f'- [{'成功' if subscribe_result == 0 else '失败'}:{subscribe_result}]交易状态订阅')
if subscribe_result != 0:
self.inited = False
return
return self.inited
self.startMarketDataSubscription()
return self.inited
def getStockPosition(self, stock_code: str):
@@ -129,9 +130,12 @@ class QmtV(XtQuantTraderCallback):
# ========================================#
def startMarketDataSubscription(self):
self.subscriptionId = xtdata.subscribe_whole_quote(['SH', 'SZ'], self.onDataUpdate)
PrintLog(LogLevel.INFO, f'- [市场数据订阅成功-{self.subscriptionId}]')
try:
self.subscriptionId = xtdata.subscribe_whole_quote(['SH', 'SZ'], self.onDataUpdate)
PrintLog(LogLevel.INFO, f'- [市场数据订阅成功-{self.subscriptionId}]')
except Exception as e:
PrintLog(LogLevel.ERROR, f'- [市场数据订阅失败-{e}]')
def stopMarketDataSubscription(self):
PrintLog(LogLevel.INFO, '- 停止市场数据订阅')
+1 -1
View File
@@ -9,4 +9,4 @@ ResultEventTradeTargetDeleted = "trade_target_deleted"
ActionEventEnableTrade = "enable_trade"
ResultEventTradeEnabled = "trade_enabled"
ActionEventDisableTrade = "disable_trade"
ResultEventTradeDisabled = "trade_disabled"
ResultEventTradeDisabled = "trade_disabled"
+8 -5
View File
@@ -1,3 +1,4 @@
from mimetypes import inited
from typing import Any
import tkinter as tk
@@ -21,9 +22,8 @@ class TradeTargetUI(ttk.Frame):
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)
eBus.event_bus.subscribe(bus_events.EventTradeTargetUpdate, self.onStrategyUpdate)
if qmtv.inited:
self.init_trade_target_pool()
# 市场监控数据
self.marketData: dict[str, Any] = {} # 存储市场数据 {stock_code: {stock_name, last_price, time}}
@@ -33,6 +33,9 @@ class TradeTargetUI(ttk.Frame):
# 创建界面
self.create_ui()
eBus.event_bus.subscribe(eBus.MarketDataUpdate, self.onMarketDataUpdated)
eBus.event_bus.subscribe(bus_events.EventTradeTargetUpdate, self.onStrategyUpdate)
def init_trade_target_pool(self):
@@ -123,9 +126,9 @@ class TradeTargetUI(ttk.Frame):
command=self.btnHandlerStopSelectedTrade, width=12).pack(side=tk.LEFT, padx=2)
ttk.Button(toolbar_frame, text="🛠 交易设置",
command=self.btnHandlerTradeSettings, width=12).pack(side=tk.LEFT, padx=2)
ttk.Button(toolbar_frame, text="🛠 网格修正(停用)",
# ttk.Button(toolbar_frame, text="🛠 网格修正(停用)",
# command=self.btnHandlerGridCorrect,
width=12).pack(side=tk.LEFT, padx=2)
# width=12).pack(side=tk.LEFT, padx=2)
ttk.Button(toolbar_frame, text="▣ 实时监控",
command=self.btnHandlerToggleMarketMonitor, width=12).pack(side=tk.RIGHT, padx=2)