@echo off setlocal enabledelayedexpansion :: ================= 配置区域 ================= :: 工作目录 (请确认路径正确) set "WORK_DIR=C:\Data\Project\NewStock\qmt" :: Python脚本名称 set "SCRIPT_NAME=qmt_trader.py" :: 最大重试次数 set MAX_RETRIES=5 :: 重试计数器 set RETRY_COUNT=0 :: 重试等待时间(秒) set RETRY_WAIT=10 :: 启动器日志目录 set "LOG_DIR=%WORK_DIR%\logs\launcher" :: =========================================== :: 1. 切换工作目录 cd /d "%WORK_DIR%" title QMT 实盘守护系统 [Port:8001] :: 2. 创建日志目录 if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" :: 获取日期作为日志文件名 (简单的日期处理,适配常见Windows格式) set "TODAY=%date:~0,4%-%date:~5,2%-%date:~8,2%" set "LOG_FILE=%LOG_DIR%\%TODAY%.log" echo ================================================== echo QMT 实盘交易系统启动 echo 时间: %time% echo 日志: %LOG_FILE% echo 管理面板: http://localhost:8001 echo ================================================== :LOOP echo. echo [%time%] 正在启动子进程... echo [%time%] 正在启动子进程... >> "%LOG_FILE%" :: 3. 启动 Python 脚本 :: 使用 uv run 启动,2>&1 将报错也写入日志 uv run %SCRIPT_NAME% >> "%LOG_FILE%" 2>&1 :: 4. 捕获退出 set EXIT_CODE=%errorlevel% echo [%time%] 进程异常退出,错误码: %EXIT_CODE% >> "%LOG_FILE%" echo 警告: 进程已退出 (Code: %EXIT_CODE%) :: 5. 重试逻辑 if %RETRY_COUNT% GEQ %MAX_RETRIES% ( echo [%time%] 达到最大重试次数,系统停止。 >> "%LOG_FILE%" :: 弹窗提示 msg * "QMT 交易系统已崩溃且无法自动恢复,请检查日志!" goto FAIL ) set /a RETRY_COUNT+=1 echo [%time%] 等待 %RETRY_WAIT% 秒后进行第 %RETRY_COUNT% 次重试... >> "%LOG_FILE%" echo 正在等待重启 (%RETRY_COUNT%/%MAX_RETRIES%)... timeout /t %RETRY_WAIT% >nul goto LOOP :FAIL title QMT 实盘守护系统 [已崩溃] color 4F echo. echo ========================================== echo 系统已停止运行 echo 请检查日志文件: %LOG_FILE% echo ========================================== pause exit /b 1