更新qmt代码,支持多端qmt登录

This commit is contained in:
2026-01-10 04:06:35 +08:00
parent dd60589280
commit 50ee1a5a0a
6 changed files with 487 additions and 495 deletions

View File

@@ -1,50 +1,58 @@
# coding:utf-8
"""
QMT交易系统启动器
用于直接运行,避免包导入问题
QMT多终端交易系统启动器
版本V2.0 (Multi-Terminal Edition)
"""
import sys
import os
import threading
import uvicorn
# 将当前目录添加到Python路径
# 将当前目录添加到Python路径,确保模块导入正常
current_dir = os.path.dirname(os.path.abspath(__file__))
if current_dir not in sys.path:
sys.path.insert(0, current_dir)
# 导入模块
from qmt_engine import QMTEngine
# 导入升级后的多终端管理器
from qmt_engine import MultiEngineManager
from api_server import create_api_server
import threading
import uvicorn
def main():
"""主函数 - 启动QMT交易引擎和API服务器"""
print(">>> 系统正在启动...")
"""主函数 - 启动多终端QMT交易引擎管理中心和API服务器"""
# 强制设置环境变量确保Python在Windows控制台输出不因编码崩溃
os.environ["PYTHONUTF8"] = "1"
# 创建QMT引擎实例
engine = QMTEngine()
print("==================================================")
print(" QMT Multi-Terminal System Starting... ")
print("==================================================")
# 1. 获取多终端管理器单例
manager = MultiEngineManager()
try:
# 初始化引擎
engine.initialize('config.json')
print("QMT引擎初始化成功")
# 2. 初始化引擎加载配置、连接Redis、初始化各终端执行单元
manager.initialize('config.json')
print("Done: Multi-Manager initialized successfully.")
except Exception as e:
print(f"QMT引擎初始化失败: {e}")
print(f"Error: System initialization failed: {repr(e)}")
import traceback
traceback.print_exc()
sys.exit(1)
# 启动交易线程
trading_thread = threading.Thread(target=engine.run_trading_loop, daemon=True)
# 3. 启动全局监控与交易路由主循环线程
# 该线程负责:终端健康检查、断线重连、消息路由、收盘结算
trading_thread = threading.Thread(target=manager.run_trading_loop, name="MainTradeLoop", daemon=True)
trading_thread.start()
print("交易线程启动成功")
print("Done: Global trading loop thread started.")
# 创建API服务器
app = create_api_server(engine)
print("API服务器创建成功")
# 4. 创建适配多终端的API服务器
app = create_api_server(manager)
print("Done: API server created with multi-terminal support.")
# 启动Web服务
print(">>> Web服务启动: http://localhost:8001")
# 5. 启动Web服务
print(">>> Web Dashboard: http://localhost:8001")
try:
# 建议关闭 access_log 以减少控制台刷屏
uvicorn.run(
app,
host="0.0.0.0",
@@ -53,12 +61,10 @@ def main():
access_log=False
)
except KeyboardInterrupt:
print("\n>>> 正在关闭系统...")
engine.stop()
print(">>> 系统已关闭")
print("\n>>> Shutdown signal received. Closing terminals...")
manager.stop()
print(">>> System safely closed.")
if __name__ == '__main__':
# 使用 -u 参数运行是最佳实践: python -u run.py
# 但这里也在代码里强制 flush 了
main()
# 最佳实践:使用 python -u run.py 运行以获得实时日志输出
main()