feat: 完善 QMT 交易模块文档和配置展示功能

- 优化前端仪表盘界面
- 添加配置文件可视化展示
- 编写 QMT 模块配置文档
- 完善项目规则体系(KiloCode)
This commit is contained in:
2026-01-27 00:52:35 +08:00
parent 50ee1a5a0a
commit 4607555eaf
31 changed files with 5248 additions and 8621 deletions

View File

@@ -5,80 +5,112 @@ setlocal enabledelayedexpansion
:: ================= 配置选项 =================
:: 1. 自动获取当前脚本所在目录
set "WORK_DIR=%~dp0"
:: 2. 设置启动文件
set "SCRIPT_NAME=run.py"
:: 3. 失败重启配置
:: 3. 是否使用 uv 管理器 (1=是, 0=否)
set USE_UV=1
:: 4. 显示输出到屏幕还是日志文件 (1=屏幕, 0=日志文件)
set SHOW_OUTPUT=1
:: 5. 失败重启配置
set MAX_RETRIES=10
set RETRY_COUNT=0
set RETRY_WAIT=15
:: 4. 日志配置
set RETRY_WAIT=10
:: 6. 日志目录 (仅在 SHOW_OUTPUT=0 时生效)
set "LOG_DIR=%WORK_DIR%logs\launcher"
:: ===========================================
cd /d "%WORK_DIR%"
title QMT 自动化交易系统 [监控中]
title QMT 自动化交易系统 [准备中]
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
:: 构建启动命令前缀
if "%USE_UV%"=="1" (
set "CMD_PREFIX=uv run python"
) else (
set "CMD_PREFIX=python"
)
:: 优化日期获取逻辑,防止由于区域设置导致的非法文件名字符
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a"
:: 提取前 8 位YYYYMMDD
set "Y=%dt:~0,4%"
set "M=%dt:~4,2%"
set "D=%dt:~6,2%"
set "TODAY=%Y%-%M%-%D%"
set "LOG_FILE=%LOG_DIR%\%TODAY%.log"
:: 日志与日期初始化
if "%SHOW_OUTPUT%"=="0" (
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a"
set "TODAY=!dt:~0,4!-!dt:~4,2!-!dt:~6,2!"
set "LOG_FILE=%LOG_DIR%\!TODAY!.log"
)
:START_LOOP
cls
echo ==================================================
echo QMT 交易系统守护进程启动
echo 工作目录: %WORK_DIR%
echo 启动文件: %SCRIPT_NAME%
echo 监控地址: http://localhost:8001
echo 日志文件: %LOG_FILE%
echo 启动命令: %CMD_PREFIX% %SCRIPT_NAME%
if "%SHOW_OUTPUT%"=="0" (
echo 输出模式: [日志文件] %LOG_FILE%
echo 注意: 窗口将不会显示运行日志,请查看上方文件。
echo 提示: 如需停止,建议直接关闭窗口。
) else (
echo 输出模式: [屏幕控制台]
echo 提示: 按 Ctrl+C 可终止程序。
)
echo ==================================================
:LOOP
:LOOP_BODY
if %RETRY_COUNT% GEQ %MAX_RETRIES% (
echo [%time%] !!! 达到最大重试次数,系统停止重启 !!! >> "%LOG_FILE%"
if "%SHOW_OUTPUT%"=="0" echo [%time%] !!! 达到最大重试次数 !!! >> "%LOG_FILE%"
color 0C
echo 错误: 系统多次崩溃,请检查日志后手动重启。
msg * "QMT 系统异常崩溃且无法自动恢复,请检查日志!"
goto FAIL
echo.
:: 【修复】将圆括号改为中括号,防止 if 块被提前截断
echo [错误] 达到最大重试次数 [%MAX_RETRIES%],系统停止重启。
echo 请检查代码或环境配置。
title QMT 系统 - 已停止
pause
exit /b 1
)
echo [%time%] 正在启动交易引擎 (第 %RETRY_COUNT% 次重启)...
:: 注意:这里将 >>> 改成了 ^>^>^> 进行转义,或者直接改用 ===
echo [%time%] ^>^>^> 启动子进程: uv run %SCRIPT_NAME% >> "%LOG_FILE%"
title QMT 系统 [运行中] - 重试: %RETRY_COUNT%
:: 启动程序 (使用 -u 参数确保输出实时刷新到日志)
:: 如果你没有安装 uv请将 uv run 改为 python
uv run python -u %SCRIPT_NAME% >> "%LOG_FILE%" 2>&1
echo [%time%] 正在启动交易引擎...
if "%SHOW_OUTPUT%"=="0" (
echo [%time%] ^>^>^> 启动子进程 >> "%LOG_FILE%"
%CMD_PREFIX% -u "%SCRIPT_NAME%" >> "%LOG_FILE%" 2>&1
) else (
%CMD_PREFIX% -u "%SCRIPT_NAME%"
)
set EXIT_CODE=%errorlevel%
:: 判断退出原因
if %EXIT_CODE% EQU 0 (
echo [%time%] 程序正常关闭。 >> "%LOG_FILE%"
echo 程序运行结束。
echo.
:: 【修复】将圆括号改为中括号
echo [%time%] 程序正常结束 [Exit Code: 0]。
if "%SHOW_OUTPUT%"=="0" echo [%time%] 程序正常结束。 >> "%LOG_FILE%"
title QMT 系统 - 已完成
pause
exit /b 0
) else if %EXIT_CODE% EQU -1073741510 (
echo.
:: 【修复】将圆括号改为中括号
echo [%time%] 检测到用户手动中断 [Ctrl+C]。守护进程将停止。
exit /b 0
)
set /a RETRY_COUNT+=1
echo [%time%] 程序异常退出Code: %EXIT_CODE% >> "%LOG_FILE%"
title QMT 系统 [等待重启] - 倒计时
echo.
echo --------------------------------------------------
echo [%time%] 警告: 进程意外中断! (退出码: %EXIT_CODE%)
echo [%time%] 将在 %RETRY_WAIT% 秒后尝试第 %RETRY_COUNT% 次重启...
echo [%time%] 警告: 进程意外崩溃! [Code: %EXIT_CODE%]
echo [%time%] 将在 %RETRY_WAIT% 秒后尝试第 %RETRY_COUNT%/%MAX_RETRIES% 次重启...
echo --------------------------------------------------
if "%SHOW_OUTPUT%"=="0" (
echo [%time%] 异常退出 Code:%EXIT_CODE%%RETRY_WAIT%秒后重启... >> "%LOG_FILE%"
)
timeout /t %RETRY_WAIT% >nul
goto LOOP
:FAIL
title QMT 系统已停机
echo.
echo ==========================================
echo 守护进程已停止。
echo 请查看日志: %LOG_FILE%
echo ==========================================
pause
exit /b 1
goto LOOP_BODY