From f7809bb62af5018ffc33a7a29c5d58c0cae3aa07 Mon Sep 17 00:00:00 2001 From: liaozhaorun <1300336796@qq.com> Date: Sun, 4 Jan 2026 23:11:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0qmt=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qmt/run.py | 8 ++++---- qmt/start.bat | 47 +++++++++++++++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/qmt/run.py b/qmt/run.py index 8dd970f..4a4b1e5 100644 --- a/qmt/run.py +++ b/qmt/run.py @@ -28,19 +28,19 @@ def main(): try: # 初始化引擎 engine.initialize('config.json') - print("✅ QMT引擎初始化成功") + print("QMT引擎初始化成功") except Exception as e: - print(f"❌ QMT引擎初始化失败: {e}") + print(f"QMT引擎初始化失败: {e}") sys.exit(1) # 启动交易线程 trading_thread = threading.Thread(target=engine.run_trading_loop, daemon=True) trading_thread.start() - print("✅ 交易线程启动成功") + print("交易线程启动成功") # 创建API服务器 app = create_api_server(engine) - print("✅ API服务器创建成功") + print("API服务器创建成功") # 启动Web服务 print(">>> Web服务启动: http://localhost:8001") diff --git a/qmt/start.bat b/qmt/start.bat index df142ef..d1fa912 100644 --- a/qmt/start.bat +++ b/qmt/start.bat @@ -1,10 +1,11 @@ @echo off +chcp 65001 >nul setlocal enabledelayedexpansion :: ================= 配置选项 ================= -:: 1. 自动获取当前脚本所在目录作为工作目录 +:: 1. 自动获取当前脚本所在目录 set "WORK_DIR=%~dp0" -:: 2. 设置启动文件(对应你拆分后的入口文件) +:: 2. 设置启动文件 set "SCRIPT_NAME=run.py" :: 3. 失败重启配置 set MAX_RETRIES=10 @@ -14,15 +15,18 @@ set RETRY_WAIT=15 set "LOG_DIR=%WORK_DIR%logs\launcher" :: =========================================== -:: 切换到工作目录 cd /d "%WORK_DIR%" title QMT 自动化交易系统 [监控中] -:: 创建日志目录 if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" -:: 获取当前日期用于日志命名 -set "TODAY=%date:~0,4%-%date:~5,2%-%date:~8,2%" +:: 优化日期获取逻辑,防止由于区域设置导致的非法文件名字符 +for /f "tokens=1-3 delims=-/ " %%a in ("%date%") do ( + set "Y=%%a" + set "M=%%b" + set "D=%%c" +) +set "TODAY=%Y%-%M%-%D%" set "LOG_FILE=%LOG_DIR%\launcher_%TODAY%.log" cls @@ -35,7 +39,6 @@ echo 日志文件: %LOG_FILE% echo ================================================== :LOOP -:: 检查重试次数 if %RETRY_COUNT% GEQ %MAX_RETRIES% ( echo [%time%] !!! 达到最大重试次数,系统停止重启 !!! >> "%LOG_FILE%" color 0C @@ -45,13 +48,37 @@ if %RETRY_COUNT% GEQ %MAX_RETRIES% ( ) echo [%time%] 正在启动交易引擎 (第 %RETRY_COUNT% 次重启)... -echo [%time%] >>> 启动子进程: uv run %SCRIPT_NAME% >> "%LOG_FILE%" +:: 注意:这里将 >>> 改成了 ^>^>^> 进行转义,或者直接改用 === +echo [%time%] ^>^>^> 启动子进程: uv run %SCRIPT_NAME% >> "%LOG_FILE%" :: 启动程序 (使用 -u 参数确保输出实时刷新到日志) +:: 如果你没有安装 uv,请将 uv run 改为 python uv run python -u %SCRIPT_NAME% >> "%LOG_FILE%" 2>&1 -:: 程序退出逻辑 set EXIT_CODE=%errorlevel% if %EXIT_CODE% EQU 0 ( echo [%time%] 程序正常关闭。 >> "%LOG_FILE%" - echo 程序运行结束。 \ No newline at end of file + echo 程序运行结束。 + pause + exit /b 0 +) + +set /a RETRY_COUNT+=1 +echo [%time%] 程序异常退出,Code: %EXIT_CODE% >> "%LOG_FILE%" +echo -------------------------------------------------- +echo [%time%] 警告: 进程意外中断! (退出码: %EXIT_CODE%) +echo [%time%] 将在 %RETRY_WAIT% 秒后尝试第 %RETRY_COUNT% 次重启... +echo -------------------------------------------------- + +timeout /t %RETRY_WAIT% >nul +goto LOOP + +:FAIL +title QMT 系统已停机 +echo. +echo ========================================== +echo 守护进程已停止。 +echo 请查看日志: %LOG_FILE% +echo ========================================== +pause +exit /b 1 \ No newline at end of file