第一个Alpha版本
This commit is contained in:
@@ -2,5 +2,4 @@
|
||||
miniqmtpath = D:/Programs/DTQMT/userdata_mini
|
||||
account_no = 99082560
|
||||
log_level = INFO
|
||||
; account_no = 89009170
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ MarketOrderTraded = "market_order_traded"
|
||||
# Pring Log
|
||||
EventPrintLog = "print_log"
|
||||
|
||||
|
||||
class EventBus:
|
||||
def __init__(self):
|
||||
self.listeners = {} # 管理各种event的订阅情况
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
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):
|
||||
@@ -16,6 +18,13 @@ class MainWindow:
|
||||
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()
|
||||
|
||||
+7
-3
@@ -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):
|
||||
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,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 = []
|
||||
if qmtv.inited:
|
||||
self.init_trade_target_pool()
|
||||
eBus.event_bus.subscribe(eBus.MarketDataUpdate, self.onMarketDataUpdated)
|
||||
eBus.event_bus.subscribe(bus_events.EventTradeTargetUpdate, self.onStrategyUpdate)
|
||||
|
||||
# 市场监控数据
|
||||
self.marketData: dict[str, Any] = {} # 存储市场数据 {stock_code: {stock_name, last_price, time}}
|
||||
@@ -34,6 +34,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):
|
||||
results = SFGridTradeTarget.select()
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -7,6 +7,5 @@ from core.qmt import qmtv
|
||||
if __name__ == '__main__':
|
||||
sdConstants.initConfig()
|
||||
qmtv.init_qmtv()
|
||||
qmtv.connect()
|
||||
window = MainWindow()
|
||||
window.run()
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ a = Analysis(
|
||||
['starter.py'],
|
||||
pathex=[],
|
||||
binaries=[],
|
||||
datas=[('config.ini', '.')], # 明确包含配置文件
|
||||
datas=[('config.ini', '.'), ('xtquant/xtdata.ini', 'xtquant')], # 明确包含配置文件和xtdata.ini
|
||||
hiddenimports=['brotli', 'brotli.encoding'],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
@@ -28,7 +28,7 @@ exe = EXE(
|
||||
upx=True,
|
||||
upx_exclude=[],
|
||||
runtime_tmpdir=None,
|
||||
console=True,
|
||||
console=False,
|
||||
disable_windowed_traceback=False,
|
||||
argv_emulation=False,
|
||||
target_arch=None,
|
||||
|
||||
Reference in New Issue
Block a user