更新qmt代码

This commit is contained in:
2026-01-04 22:43:13 +08:00
parent 040d65cf9e
commit afc703549f
8 changed files with 10852 additions and 55 deletions

View File

@@ -1,75 +1,57 @@
@echo off
setlocal enabledelayedexpansion
:: ================= <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =================
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼ (<28><>ȷ<EFBFBD><C8B7>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ȷ)
set "WORK_DIR=C:\Data\Project\NewStock\qmt"
:: Python<EFBFBD>ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
set "SCRIPT_NAME=qmt_trader.py"
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>
set MAX_RETRIES=5
:: <20><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>
:: ================= 配置选项 =================
:: 1. 自动获取当前脚本所在目录作为工作目录
set "WORK_DIR=%~dp0"
:: 2. 设置启动文件(对应你拆分后的入口文件)
set "SCRIPT_NAME=run.py"
:: 3. 失败重启配置
set MAX_RETRIES=10
set RETRY_COUNT=0
:: <20><><EFBFBD>Եȴ<D4B5>ʱ<EFBFBD><CAB1>(<28><>)
set RETRY_WAIT=10
:: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־Ŀ¼
set "LOG_DIR=%WORK_DIR%\logs\launcher"
set RETRY_WAIT=15
:: 4. 日志配置
set "LOG_DIR=%WORK_DIR%logs\launcher"
:: ===========================================
:: 1. <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
:: 切换到工作目录
cd /d "%WORK_DIR%"
title QMT ʵ<EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>ϵͳ [Port:8001]
title QMT 自动化交易系统 [监控中]
:: 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־Ŀ¼
:: 创建日志目录
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
:: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD> (<28>򵥵<EFBFBD><F2B5A5B5><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B3A3>Windows<77><73>ʽ)
:: 获取当前日期用于日志命名
set "TODAY=%date:~0,4%-%date:~5,2%-%date:~8,2%"
set "LOG_FILE=%LOG_DIR%\%TODAY%.log"
set "LOG_FILE=%LOG_DIR%\launcher_%TODAY%.log"
cls
echo ==================================================
echo QMT ʵ<EFBFBD>̽<EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo ʱ<EFBFBD><EFBFBD>: %time%
echo <EFBFBD><EFBFBD>־: %LOG_FILE%
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: http://localhost:8001
echo QMT 交易系统守护进程启动
echo 工作目录: %WORK_DIR%
echo 启动文件: %SCRIPT_NAME%
echo 监控地址: http://localhost:8001
echo 日志文件: %LOG_FILE%
echo ==================================================
:LOOP
echo.
echo [%time%] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>...
echo [%time%] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>... >> "%LOG_FILE%"
:: 3. <20><><EFBFBD><EFBFBD> Python <20>ű<EFBFBD>
:: ʹ<><CAB9> uv run <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2>&1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳд<D2B2><D0B4><EFBFBD><EFBFBD>־
uv run %SCRIPT_NAME% >> "%LOG_FILE%" 2>&1
:: 4. <20><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
set EXIT_CODE=%errorlevel%
echo [%time%] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %EXIT_CODE% >> "%LOG_FILE%"
echo <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD> (Code: %EXIT_CODE%)
:: 5. <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
:: 检查重试次数
if %RETRY_COUNT% GEQ %MAX_RETRIES% (
echo [%time%] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳֹͣ<EFBFBD><EFBFBD> >> "%LOG_FILE%"
:: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
msg * "QMT <20><><EFBFBD><EFBFBD>ϵͳ<CFB5>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7>Զ<EFBFBD><D4B6>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>"
echo [%time%] !!! 达到最大重试次数,系统停止重启 !!! >> "%LOG_FILE%"
color 0C
echo 错误: 系统多次崩溃,请检查日志后手动重启。
msg * "QMT 系统异常崩溃且无法自动恢复,请检查日志!"
goto FAIL
)
set /a RETRY_COUNT+=1
echo [%time%] <EFBFBD>ȴ<EFBFBD> %RETRY_WAIT% <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD> %RETRY_COUNT% <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... >> "%LOG_FILE%"
echo <20><><EFBFBD>ڵȴ<DAB5><C8B4><EFBFBD><EFBFBD><EFBFBD> (%RETRY_COUNT%/%MAX_RETRIES%)...
timeout /t %RETRY_WAIT% >nul
echo [%time%] 正在启动交易引擎 (第 %RETRY_COUNT% 次重启)...
echo [%time%] >>> 启动子进程: uv run %SCRIPT_NAME% >> "%LOG_FILE%"
goto LOOP
:: 启动程序 (使用 -u 参数确保输出实时刷新到日志)
uv run python -u %SCRIPT_NAME% >> "%LOG_FILE%" 2>&1
:FAIL
title QMT ʵ<><CAB5><EFBFBD>ػ<EFBFBD>ϵͳ [<5B>ѱ<EFBFBD><D1B1><EFBFBD>]
color 4F
echo.
echo ==========================================
echo ϵͳ<CFB5><CDB3>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
echo <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>: %LOG_FILE%
echo ==========================================
pause
exit /b 1
:: 程序退出逻辑
set EXIT_CODE=%errorlevel%
if %EXIT_CODE% EQU 0 (
echo [%time%] 程序正常关闭。 >> "%LOG_FILE%"
echo 程序运行结束。