# coding:utf-8 """ QMT交易系统启动器 用于直接运行,避免包导入问题 """ import sys import os # 将当前目录添加到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 api_server import create_api_server import threading import uvicorn def main(): """主函数 - 启动QMT交易引擎和API服务器""" print(">>> 系统正在启动...") # 创建QMT引擎实例 engine = QMTEngine() try: # 初始化引擎 engine.initialize('config.json') print("QMT引擎初始化成功") except Exception as e: print(f"QMT引擎初始化失败: {e}") sys.exit(1) # 启动交易线程 trading_thread = threading.Thread(target=engine.run_trading_loop, daemon=True) trading_thread.start() print("交易线程启动成功") # 创建API服务器 app = create_api_server(engine) print("API服务器创建成功") # 启动Web服务 print(">>> Web服务启动: http://localhost:8001") try: uvicorn.run( app, host="0.0.0.0", port=8001, log_level="warning", access_log=False ) except KeyboardInterrupt: print("\n>>> 正在关闭系统...") engine.stop() print(">>> 系统已关闭") if __name__ == '__main__': # 使用 -u 参数运行是最佳实践: python -u run.py # 但这里也在代码里强制 flush 了 main()